集合类关系图如下:
一,SET:
① EnumSet
package set; import java.util.EnumSet; import java.util.HashSet; import java.util.Set; /* * DESCRIPTION : * USER : zhouhui * DATE : 2017/8/18 12:05 */ public class EnumSetTest { /** * EnumSet提供了对枚举的set集合操作,提供了更高效简单的枚举操作 * 其实使用hashset也能实现对枚举的操作,应该是EnumSet更专注做枚举一些吧 * EnumSet是一个抽象类,继承于AbstractSet,AbstractSet实现Set接口 */ public static void main(String[] args) { System.out.println("EnumSet.noneOf"); Set<Student> set=EnumSet.noneOf(Student.class); set.add(Student.HARRY); set.add(Student.ROBBIE); set.add(Student.ROBIN); for(Student p:set){ System.out.println(p); } set.clear(); System.out.println(); System.out.println("EnumSet.allOf"); set=EnumSet.allOf(Student.class); for(Student p:set){ System.out.println(p); } set.clear(); System.out.println(); System.out.println("EnumSet.Of one"); set=EnumSet.of(Student.ROBIN); for(Student p:set){ System.out.println(p); } System.out.println(); System.out.println("EnumSet.Of two"); set=EnumSet.of(Student.ROBIN,Student.HARRY); for(Student p:set){ System.out.println(p); } System.out.println(); System.out.println("hashset:"); Set<Student> set2 = new HashSet<Student>(); set2.add(Student.HARRY); set2.add(Student.ROBBIE); set2.add(Student.ROBIN); for (Student student : set2){ System.out.println(student); } } } enum Student { ROBIN("robin"), HARRY("harry",40), ROBBIE("robbie"); String name; int age; private Student(String name) { this(name,0); } private Student(String name,int age) { this.name=name; this.age=age; } public String toString() { return name; } }
打印结果:
EnumSet.noneOf robin harry robbie EnumSet.allOf robin harry robbie EnumSet.Of one robin EnumSet.Of two robin harry hashset: robbie robin harry
② LinkedHashSet
package set; import java.util.LinkedHashSet; import java.util.Set; /* * DESCRIPTION : * USER : zhouhui * DATE : 2017/8/18 14:35 */ public class LinkedHashSetTest { /** * LinkedHashSet是有序的set,不允许重复,但是跟放入的先后顺序有关。 * 如果已经包含这个元素,那么add会失败 */ public static void main(String[] args) { Set<Integer> set = new LinkedHashSet<Integer>(); set.add(1); set.add(5); set.add(2); set.add(1); for(Integer i : set){ System.out.println(i); } } }
打印结果:
1 5 2
③ TreeSet
package set; import java.util.Comparator; import java.util.Set; import java.util.TreeSet; /* * DESCRIPTION : * USER : zhouhui * DATE : 2017/8/18 12:27 */ public class TreeSetTest { /** * TreeSet是类,实现NavigableSet,NavigableSet继承SortedSet接口,SortedSet实现Set接口 * 默认升序排序,如果要改变排序规则,可以实现Comparator的compare方法 * 其内部使用了Map */ public static void main(String[] args) { Set<Integer> set = new TreeSet<Integer>(new Comparator<Integer>() { public int compare(Integer o1, Integer o2) { return o2 - o1; } }); set.add(2); set.add(1); set.add(3); for(Integer i : set){ System.out.println(i); } } }
打印结果:
3 2 1
二,List
① LinkedList
package list; import java.util.LinkedList; import java.util.List; /* * DESCRIPTION : * USER : zhouhui * DATE : 2017/8/18 15:22 */ public class LinkedListTest { /** * LinkedList和ArrayList的区别 * LinkedList是基于链表实现的,ArrayList是基于动态数组(初始化数据长度,后期再增加长度)实现的。 * 所以对于查询,ArrayList根据角标来查询时要比LinkedList要快。 * 对于修改,LinkedList要比ArrayList要快,因为ArrayList是数组,数组内容在一块存储空间,需要移动其他已经存储的元素,LinkedList只需要修改前后的引用就可以了,不涉及对象的移动 */ public static void main(String[] args) { List<Integer> list = new LinkedList<Integer>(); list.add(1); list.add(2); for(Integer i : list){ System.out.println(i); } } }
打印结果:
1 2
② vector
package list; import java.util.List; import java.util.Vector; /* * DESCRIPTION : * USER : zhouhui * DATE : 2017/8/18 15:41 */ public class VectorTest { /** * Vector类实现了List接口,他和ArrayList的区别是,他是线程安全的。 * 内部实现是数组 * */ public static void main(String[] args) { List<Integer> list = new Vector<Integer>(); list.add(1); list.add(2); for(Integer i : list){ System.out.println(i); } } }
打印结果:
1 2
三,queue
① ProrityQueue
package queue; import java.util.Comparator; import java.util.PriorityQueue; /* * DESCRIPTION : * USER : zhouhui * DATE : 2017/8/18 17:28 */ public class ProrityQueueTest { public static void main(String[] args) { PriorityQueue<Boss> priorityQueue = new PriorityQueue<Boss>(2,new Comparator<Boss>() { public int compare(Boss o1, Boss o2) { return o2.getAge() - o1.getAge(); } }); priorityQueue.add(new Boss("zhouhui",28)); priorityQueue.add(new Boss("zhangjingjing",26)); for(Boss boss : priorityQueue){ System.out.println(boss.toString()); } } } class Boss{ private String name; private Integer age; public Boss(String name, Integer age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } @Override public String toString() { return "Boss{" + "name=‘" + name + ‘\‘‘ + ", age=" + age + ‘}‘; } }
打印结果:
Boss{name=‘zhouhui‘, age=28} Boss{name=‘zhangjingjing‘, age=26}
四 map
① EnumMap
package map; import java.util.EnumMap; import java.util.Map; /* * DESCRIPTION : * USER : zhouhui * DATE : 2017/8/18 15:46 */ public class EnumMapTest { /** * EnumMap的key必须是枚举类型 */ public static void main(String[] args) { Map<Student,String> map = new EnumMap<Student, String>(Student.class); map.put(Student.HARRY,Student.HARRY.toString()); map.put(Student.ROBBIE,Student.ROBBIE.toString()); map.put(Student.ROBIN,Student.ROBIN.toString()); for(Map.Entry<Student,String> entry : map.entrySet()){ System.out.println(entry.getKey().name + ":" + entry.getValue()); } } } enum Student { ROBIN("robin"), HARRY("harry",40), ROBBIE("robbie"); String name; int age; private Student(String name) { this(name,0); } private Student(String name,int age) { this.name=name; this.age=age; } public String toString() { return name; } }
打印结果:
robin:robin harry:harry robbie:robbie
② hashtable
package map; import java.util.Collections; import java.util.HashMap; import java.util.Hashtable; import java.util.Map; /* * DESCRIPTION : * USER : zhouhui * DATE : 2017/8/18 16:14 */ public class HashTableTest { /** * hashtable和hashmap的区别: * 1,hashtable是线程安全的,hashmap不是 * 2,hashmap能接受key和value都是null的情况,hashtable不行 * 3,hashmap可以通过Collections.synchronizedMap(map)变成线程安全的 */ public static void main(String[] args) { Hashtable<Integer,Integer> hashtable = new Hashtable<Integer,Integer>(); for (int i = 0; i < 10; i++) { hashtable.put(i,i); } //hashtable不允许null,会报空指针 //hashtable.put(null,null); for(Map.Entry<Integer,Integer> entry : hashtable.entrySet()){ System.out.println(entry.getKey() + ":" + entry.getValue()); } Map<Integer,Integer> map = new HashMap<Integer, Integer>(); map.put(1,12); map = Collections.synchronizedMap(map); } }
打印结果:
9:9 8:8 7:7 6:6 5:5 4:4 3:3 2:2 1:1 0:0
③ IdentityHashMap
package map; import java.util.HashMap; import java.util.IdentityHashMap; import java.util.Map; /* * DESCRIPTION : * USER : zhouhui * DATE : 2017/8/18 15:57 */ public class IdentityHashMapTest { /** * IdentityHashMap判断key是否重复是用对象==,而不是想HashMap这样使用对象的toString * 比如"1"或者String.valueOf("1"),和new String("1")是不一样的,IdentityHashMap能放进去,而HashMap不可以。 */ public static void main(String[] args) { Map<String,String> map = new IdentityHashMap<String,String>(); map.put("1","2"); map.put(new String("1"),"2"); for(Map.Entry<String,String> entry : map.entrySet()){ System.out.println(entry.getKey() + ":" + entry.getValue()); } System.out.println("---------------------"); map = new HashMap<String, String>(); map.put(String.valueOf("1"),"2"); map.put(new String("1"),"2"); for(Map.Entry<String,String> entry : map.entrySet()){ System.out.println(entry.getKey() + ":" + entry.getValue()); } } }
打印结果:
1:2 1:2 --------------------- 1:2
④ LinkedHashMap
package map; import java.util.Map; /* * DESCRIPTION : * USER : zhouhui * DATE : 2017/8/18 16:09 */ public class LinkedHashMapTest { /** * 有序的map集合。 */ public static void main(String[] args) { Map<Integer,Integer> map = new java.util.LinkedHashMap<Integer, Integer>(); map.put(1,3); map.put(2,3); map.put(3,3); for(Map.Entry<Integer,Integer> entry : map.entrySet()){ System.out.println(entry.getKey() + ":" + entry.getValue()); } } }
打印结果:
1:3 2:3 3:3
⑤ properties
package map; import java.util.Map; import java.util.Properties; /* * DESCRIPTION : * USER : zhouhui * DATE : 2017/8/18 16:26 */ public class PropertiesTest { /** * properties继承于hashtable,其key和value都是string的,即使可以提供put(Object,Object)的方法,那么最后都会toString变成String,String。 * * properties类更多的是load文件,getProperty(String key)获取属性值 */ public static void main(String[] args) { Properties properties = new Properties(); properties.put(new Boss("zhou",1),new Boss("zhang",12)); for(Map.Entry<Object,Object> entry : properties.entrySet()){ System.out.println(entry.getKey() + ":" + entry.getValue()); } } } class Boss{ private String name; private Integer age; public Boss(String name, Integer age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } @Override public String toString() { return "Boss{" + "name=‘" + name + ‘\‘‘ + ", age=" + age + ‘}‘; } @Override public boolean equals(Object obj) { return super.equals(obj); } }
打印结果
Boss{name=‘zhou‘, age=1}:Boss{name=‘zhang‘, age=12}
⑥ TreeMap
package map; import java.util.Comparator; import java.util.Map; import java.util.TreeMap; /* * DESCRIPTION : * USER : zhouhui * DATE : 2017/8/18 16:53 */ public class TreeMapTest { /** * TreeMap是根据key有序的map */ public static void main(String[] args) { Map<Integer,Integer> map = new TreeMap<Integer, Integer>(new Comparator<Integer>() { public int compare(Integer o1, Integer o2) { return o2 - o1; } }); map.put(1,2); map.put(2,3); map.put(3,1); for(Map.Entry<Integer,Integer> entry : map.entrySet()){ System.out.println(entry.getKey() + ":" + entry.getValue()); } } }
打印结果:
3:1 2:3 1:2
⑦ WeakHashMap
package map; import java.util.Map; import java.util.WeakHashMap; /* * DESCRIPTION : * USER : zhouhui * DATE : 2017/8/18 17:03 */ public class WeakHashMapTest { /** * weakhashmap和hashmap的区别是: * weakhashmap的key如果是一个空引用,那么会被释放掉。 */ public static void main(String[] args) { String a = new String("1"); Map<String,String> map = new WeakHashMap<String, String>(); map.put(a,"2"); for(Map.Entry<String,String> entry : map.entrySet()){ System.out.println(entry.getKey() + ":" + entry.getValue()); } System.out.println("--------------------------------------"); a = null; System.gc(); for(Map.Entry<String,String> entry : map.entrySet()){ System.out.println(entry.getKey() + ":" + entry.getValue()); } } }
打印结果
1:2 --------------------------------------
时间: 2024-10-29 10:45:57