集合框架— —学习总结
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了集合框架— —学习总结相关的知识,希望对你有一定的参考价值。
学习的集合框架示意图:
一、Collection
特点:无序,可重复
(1)功能与方法:
二、代码演练
package Java20170402; import java.lang.reflect.Array; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; class Student01{ private String name; private String studentId; public Student01(String name, String studentId) { super(); this.name = name; this.studentId = studentId; } public String toString() { return studentId+"--"+name; } public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Student01 other = (Student01) obj; if (studentId == other.studentId) return true; return false; } } public class CollectionDemo { public static void main(String[] args) { System.out.println("----------------初阶方法----------------"); Collection<String> c = new ArrayList<String>(); Collection<String> c1 = new ArrayList<String>(); c.add("one");//add的返回值均为true,这里就不再赘述 c.add("two"); c.add("three"); c1.add("柯西"); c1.add("高斯"); System.out.println("(1)add:创建的集合c为:"+c); c.addAll(c1); System.out.println("(2)addAll:此时的集合c为:"+c); boolean b1 = c.contains("柯西"); System.out.println("(3)contains:此时的集合是否包含“柯西”:"+b1); boolean b2 = c.containsAll(c1); System.out.println("(4)containsAll:此时的集合是否包含c1集合的所有元素:"+b2); int len = c.size(); System.out.println("(5)size:此时集合的元素数为:"+len); boolean b3 = c.isEmpty(); System.out.println("(6)isEmpty:此时集合是否为空:"+b3); boolean b4 = c.remove("高斯"); System.out.println("(7)是否移除了“高斯”:"+b4+";移除后的集合c为:"+c); boolean b5 = c.removeAll(c1); System.out.println("(8)是否移除了c1的所有元素:"+b5+";移除后的集合c为:"+c); boolean b6 = c.retainAll(c1); System.out.println("(9)判断集合c此时是否发生了改变:"+b6+";此时集合c变为之前的集合c与c1的交集:"+c); c.add("柯西"); System.out.println(" 集合c添加“柯西”后为:"+c); boolean b7 = c.retainAll(c1); System.out.println(" 判断集合c此时是否发生了改变:"+b7+";此时集合c为:"+c); c.clear(); System.out.println("(10)清除c中的所有元素,此时集合c为:"+c); System.out.println("----------------高阶方法----------------"); System.out.println("-----equals方法-----"); Collection<String> c2 = new ArrayList<String>(); Collection<String> c3 = new ArrayList<String>(); c2.add("柯西"); c2.add("高斯"); c3.add("柯西"); System.out.println("(11)此时集合c2为:"+c2); System.out.println(" 此时集合c3为:"+c3); boolean b8 = c2.equals(c3); System.out.println(" c2.equals(c3)为:"+b8); c3.add("高斯"); System.out.println(" 此时集合c2为:"+c2); System.out.println(" 此时集合c3为:"+c3); boolean b9 = c2.equals(c3); System.out.println(" c2.equals(c3)为:"+b9); Collection<Student01> c4 = new ArrayList<Student01>(); c4.add(new Student01("柯西","001")); c4.add(new Student01("高斯","002")); System.out.println(" 此时c4集合为:"+c4); Collection<Student01> c5 = new ArrayList<Student01>(); c5.add(new Student01("柯西","001")); c5.add(new Student01("高斯","003")); System.out.println(" 此时c5集合为:"+c5); boolean b10 = c4.equals(c5); System.out.println(" c4.equals(c5)为:"+b10); Collection<Student01> c6 = new ArrayList<Student01>(); c6.add(new Student01("柯西","001")); c6.add(new Student01("欧拉","002")); System.out.println(" 此时c6集合为:"+c6); boolean b11 = c4.equals(c6); System.out.println(" c4.equals(c6)为:"+b11); System.out.println("equals方法就简单举例,后面会专门整理一个专题"); System.out.println("-----遍历集合-----"); System.out.println("(12)方法一:toArray(),将集合转换成数组进行遍历"); Collection<String> c7 = new ArrayList<String>(); c7.add("one"); c7.add("two"); c7.add("three"); System.out.println("集合c7为:"+c7); Object[] objects = c7.toArray(); for(int i=0;i<objects.length;i++){ //System.out.println(objects[i]); //强转为字符串输出更好 String str = (String)objects[i]; System.out.println(str); } System.out.println("(13)方法二:iterator(),利用迭代器遍历集合"); System.out.println("集合c7为:"+c7); Iterator i = c7.iterator(); while(i.hasNext()){ Object obj = i.next(); String str1 = (String)obj; System.out.println(str1); }
System.out.println("方法三:增强for循环");
System.out.println("集合c7为:+c7");
for(String s:c7){
System..out.println(s);
} System.out.println("-----hashCode()-----"); System.out.println("初步了解hashCode是什么东西"); Collection<String> c8 = new ArrayList<String>(); c8.add("one"); System.out.println("这就是hashCode()方法的返回值,即hashCode值:"+c8.hashCode()); } }
运行结果为:
----------------初阶方法---------------- (1)add:创建的集合c为:[one, two, three] (2)addAll:此时的集合c为:[one, two, three, 柯西, 高斯] (3)contains:此时的集合是否包含“柯西”:true (4)containsAll:此时的集合是否包含c1集合的所有元素:true (5)size:此时集合的元素数为:5 (6)isEmpty:此时集合是否为空:false (7)是否移除了“高斯”:true;移除后的集合c为:[one, two, three, 柯西] (8)是否移除了c1的所有元素:true;移除后的集合c为:[one, two, three] (9)判断集合c此时是否发生了改变:true;此时集合c变为之前的集合c与c1的交集:[] 集合c添加“柯西”后为:[柯西] 判断集合c此时是否发生了改变:false;此时集合c为:[柯西] (10)清除c中的所有元素,此时集合c为:[] ----------------高阶方法---------------- -----equals方法----- (11)此时集合c2为:[柯西, 高斯] 此时集合c3为:[柯西] c2.equals(c3)为:false 此时集合c2为:[柯西, 高斯] 此时集合c3为:[柯西, 高斯] c2.equals(c3)为:true 此时c4集合为:[001--柯西, 002--高斯] 此时c5集合为:[001--柯西, 003--高斯] c4.equals(c5)为:false 此时c6集合为:[001--柯西, 002--欧拉] c4.equals(c6)为:true equals方法就简单举例,后面会专门整理一个专题 -----遍历集合----- (12)方法一:toArray(),将集合转换成数组进行遍历 集合c7为:[one, two, three] one two three (13)方法二:iterator(),利用迭代器遍历集合 集合c7为:[one, two, three] one two three
方法三:增强for循环
集合c7为:[one, two, three]
one
two
three -----hashCode()----- 初步了解hashCode是什么东西 这就是hashCode()方法的返回值,即hashCode值:110213
二、List
(1)List的简单介绍:
特点:有序,可重复
有序的 collection(也称为序列)。此接口的用户可以对列表中每个元素的插入位置进行精确地控制。用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素。与 set 不同,列表通常允许重复的元素。更确切地讲,列表通常允许满足 e1.equals(e2) 的元素对 e1 和 e2.
(2)功能与方法:
(3)代码演练:
package Java20170404; import java.util.ArrayList; import java.util.List; public class ListDemo { public static void main(String[] args) { System.out.println("--------------------初阶方法--------------------"); System.out.println(":(1)add(E);(2)add(int,E);(3)addAll(Collection);(4)addAll(int,Collection)" + "(5)contains(Object);(6)containsAll(Collection);(7)get(int);(8)hashcode;(9)indexOf(object);" + "(10)isEmpty();(11)clear();(12)equals(object);(13)iterator;(14)lastIndexOf(object)(15)listIterator()" + "(16)listIterator(int);(17)remove(int);(18)remove(object);(19)removeAll(Collection);(20)retainAll(Collection)" + "(21)set(int,E);(22)size();(23)subList(int,int);(24)toArray()" ); List<String> list = new ArrayList<String>(); list.add("one"); list.add("two"); list.add(1,"three"); System.out.println("集合list为:"+list); List<String> list1 = new ArrayList<String>(); list1.add("1"); list1.add("2"); list.addAll(list1); System.out.println("集合list为:"+list); list.addAll(1, list1); System.out.println("集合list为:"+list); int index = list.indexOf("1"); System.out.println("1第一次出现的位置下标为:"+index); int index1 = list.lastIndexOf("1"); System.out.println("1最后一次出现的位置下标为:"+index1); list.set(3, "3"); System.out.println("将three修改为3:"+list); List<String> sub = list.subList(1, 3); //左闭右开 System.out.println("截取的集合为:"+sub); } }
运行结果为:
--------------------初阶方法-------------------- :(1)add(E);(2)add(int,E);(3)addAll(Collection);(4)addAll(int,Collection)(5)contains(Object);(6)containsAll(Collection);(7)get(int);(8)hashcode;(9)indexOf(object);(10)isEmpty();(11)clear();(12)equals(object);(13)iterator;(14)lastIndexOf(object)(15)listIterator()(16)listIterator(int);(17)remove(int);(18)remove(object);(19)removeAll(Collection);(20)retainAll(Collection)(21)set(int,E);(22)size();(23)subList(int,int);(24)toArray() 集合list为:[one, three, two] 集合list为:[one, three, two, 1, 2] 集合list为:[one, 1, 2, three, two, 1, 2] 1第一次出现的位置下标为:1 1最后一次出现的位置下标为:5 将three修改为3:[one, 1, 2, 3, two, 1, 2] 截取的集合为:[1, 2]
三、Set
(1)Set的简单介绍:
特点:无序,不可重复
一个不包含重复元素的 collection。更确切地讲,set 不包含满足 e1.equals(e2)
的元素对 e1
和 e2
,并且最多包含一个 null 元素。
(2)功能与方法:
(3)代码演练:
package Java20170404; import java.util.HashSet; import java.util.Set; public class SetDemo { public static void main(String[] args) { Set<String> set = new HashSet<String>(); set.add("one"); set.add("two"); set.add("three"); boolean b1 = set.add("two"); System.out.println(b1); System.out.println(set); } }
运行结果为:
false [one, two, three]
四、Map
(1)Map的简单介绍:
特点:键值对(Key---Value),Key不可重复,Value可重复,Key---Set,Value---Collection
将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。
Map 接口提供三种collection 视图,允许以键集、值集或键-值映射关系集的形式查看某个映射的内容。映射顺序 定义为迭代器在映射的 collection 视图上返回其元素的顺序。某些映射实现可明确保证其顺序,如 TreeMap 类;另一些映射实现则不保证顺序,如 HashMap 类。
注:将可变对象用作映射键时必须格外小心。当对象是映射中某个键时,如果以影响 equals 比较的方式更改了对象的值,则映射的行为将是不确定的。此项禁止的一种特殊情况是不允许某个映射将自身作为一个键包含。虽然允许某个映射将自身作为值包含,但请格外小心:在这样的映射上 equals 和 hashCode 方法的定义将不再是明确的。
(2)功能与方法:
(3)代码演练:
package Java20170404; import java.util.Collection; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; import java.util.Set; public class MapDemo { public static void main(String[] args) { System.out.println("方法:(1)clear();(2)containsKey(Object key);(3)containsValue(Object value);(4)entrySet();" + "(5)equals(Object o);(6)get(Object key);(7)hashCode();(8)isEmpty();(9)keySet();(10)put(K key,V value)" + "(11)putAll(Map);(12)remove(Object key);(13)size();(14)values()"); Map<String,String> map = new HashMap<String,String>(); map.put("001", "one"); map.put("002", "two"); map.put("003", "three"); System.out.println(map); Object obj01 = map.get("001"); System.out.println(obj01); map.remove("002"); System.out.println(map); Set<String> key = map.keySet(); System.out.println("key:"+key); Collection<String> value = map.values(); System.out.println("value:"+value); Set<Entry<String, String>> m = map.entrySet(); System.out.println(m); System.out.println("----------Map集合的遍历----------"); System.out.println("方法一、遍历所有的Key:"); for(String k:key){ String v= map.get(k); System.out.println(k+"---"+v); } System.out.println("方法二、遍历所有的key-value:"); for(Entry<String, String> kv :m){ String k = kv.getKey(); String v = kv.getValue(); System.out.println(k+"---"+v); } System.out.println("方法三、遍历所有的value(不常用):"); for(String v:value){ System.out.println(v); } } }
运行结果:
方法:(1)clear();(2)containsKey(Object key);(3)containsValue(Object value);(4)entrySet();(5)equals(Object o);(6)get(Object key);(7)hashCode();(8)isEmpty();(9)keySet();(10)put(K key,V value)(11)putAll(Map);(12)remove(Object key);(13)size();(14)values() {001=one, 002=two, 003=three} one {001=one, 003=three} key:[001, 003] value:[one, three] [001=one, 003=three] ----------Map集合的遍历---------- 方法一、遍历所有的Key: 001---one 003---three 方法二、遍历所有的key-value: 001---one 003---three 方法三、遍历所有的value: one three
四、Queue与Deque见其他专题
以上是关于集合框架— —学习总结的主要内容,如果未能解决你的问题,请参考以下文章
201621123037 《Java程序设计》第9周学习总结