-
Java集合中继承Collection接口分为4种:Set(无序不可重复),List(有序可重复),Map(映射关系),Queue(队列)。
-
集合只能保存对象,不能保存基本数据类型,虽然集合不能存放基本数据类型,但是它支持自动装箱。
-
Java集合主要由两个接口派生:Collection和Map。它们是Java集合框架的根接口。
-
Collection接口的子接口有:List,Set,Queue。
-
Set表示数学意义上的集合概念。该接口有两个实现类HashSet和TreeSet,其中TreeSet实现了SortedSet接口,因此TreeSet容器中的元素是有序的,它基于红黑树数据结构实现(SortedSet是用来进行排序的),set的顺序和添加数据的顺序无关,它是按照值的实际大小排序的。
-
Map提供了一个从映射到值的数据结构,Java类库中有多个实现类,HashMap,TreeMap,LinkedHashMap,WeakHashMap和IdentityHashMap。其中HashMap是基于散列表实现,TreeMap基于红黑树数据结构实现。LinkedHashMap采用列表来维护内部顺序。
/* * Set是无序切不可重复的集合, * 因此存入Set集合的每一个元素都需要定义一个equals()方法来确保对象的唯一性。 * 简单的说就是每次添加一个元素都会先调用equals()方法来进行判断, * 返回值为false进行存入,true不写入。 * 所以Set类型的集合就算添加100次相同的元素值,集合长度也只有1。 * Set集合元素查找的就是它本身。 * */ Collection c=new TreeSet();//TreeSet是有序的,因为TreeSet实现了SortedSet接口。 c.add("小花"); c.add("小花"); c.add("小花"); c.add("小明"); c.add("小兰"); System.out.println(c); System.out.println("集合c的长度:"+c.size()); System.out.println( "集合c里面是否包含小花:"+c.contains("小花")); Collection c1=new HashSet(); c1.add("小明"); c1.add("小花"); c1.add("小兰"); System.out.println(c1); System.out.println("集合c1的长度:"+c1.size()); System.out.println( "集合c里面是否包含小明:"+c1.contains("小明"));
/*
* Iterator必须依附于Collection,每一个Iterator对象,
* 必然会有一个Collection对象与之关联。
* Collection是继承的Iterator接口,而没有直接实现,采用的间接实现。
* */
for (Iterator it=c.iterator();it.hasNext();){
System.out.println(it.next());
if (it.next().equals("小花")) it.remove();
//在使用Iterator迭代的过程中不能修改/添加/删除集合里面的元素,
//会发生ConcurrentModificationException异常
c.add("小羊");//会出错,解决办法就是将要操作的元素先保存在一个集合中,等迭代完成了在进行操作。
}
/*
* Map集合采用键值对(Key-value)形式进行存储,保存具有映射关系的数据
* Map集合中Key不能重复,但是value可以重复
* */
Map map=new TreeMap();//TreeMap是有序的,因为TreeMap实现了SortedMap接口。
map.put("key1",1);
map.put("key2",1);
map.put("key3",1);
System.out.println(map);
System.out.println("集合map的长度:"+map.size());
System.out.println( "集合map里面是否包含小明:"+map.containsKey("key1"));
Map map1=new HashMap();
map1.put("key1",3);
map1.put("key2",2);
map1.put("key3",1);
System.out.println(map);
System.out.println("集合map的长度:"+map1.size());
System.out.println( "集合map里面是否包含小明:"+map1.containsKey("key1"));
}
- TreeSet和TreeMap
TreeSet底层的实现其实是通过TreeMap来实现的,因此它底层实现的原理是红黑树
(HashSet底层的实是通过HashMap来实现的,因此它底层实现的原理是散列表)它们实现的核心方法使用的hashCode()和equals();