集合
一、
1、什么是集合?有什么用?
集合是一个容器,一个载体,可以一次容纳多个对象。集合本身也是一个对象
(集合中不能之内存储基本数据类型,也不能存java对象,只能存地址!!)
2、集合中不能直接存储基本数据类型,也不能直接存储java对象。集合当中存储的是java对象的内存地址(引用)
3、在java中每一个不同的集合,底层会对应不同的数据结构。往不同的集合中存储元素。等于将数据放到了不同的数据结构当中
Eg: new ArrayList(); // 创建一个集合,底层是数组
new LinkedList(); // 创建一个集合对象,底层是链表
new TreeSet(); //创建一个集合对象,底层是二叉树
4、所有的集合类和集合接口都在java.util包下。为了更好地掌握集合,最好把集合的继承结构图背会。
5、java中的集合分为两大类:
一类是以单个方式存储元素:
单个方式存储元素,这一类集合中超级父接口:java.util.Collection;
一类是以键值对的方式存储元素:
以键值对的方式存储元素,这一类集合中超级父接口:java.util.Map;
6、遍历就是迭代,迭代就是遍历
二、List接口和Set接口
1、List集合存储元素的特点:有序(存进去是这个顺序,取出来还是这个顺序)可重复(比如可以存很多个1),存储的元素有下标。下标从0开始,依次递增。
①:ArrayList集合底层采用了数组这种数据结构
②:LinkedList集合底层采用了双向链表数据结构
③:Vector集合底层采用了数组这种数据结构
以上三个和List接口是“实现”关系。且都为实现类。
2、Set集合存储元素特点:无序(存进去是这个顺序,取出来就不一定是这个顺序了),且Set中的元素不可重复。
①:HashSet集合:实际上HashSet集合在new的时候,底层实际上new了一个HashMap集合;向HashSet集合中存储元素,实际上是存到HashMap中了。HashMap集合是一个哈希表数据结构
②TreeSet集合:TreeSet集合底层实际上是TreeMap,new TreeSet集合的时候,底层实际上new了一个TreeMap集合;往TreeSet集合中存数据的时候,实际上是存到TreeMap集合当中了。TreeSet集合底层采用了二叉树数据结构
以上两个都是实现类
3、SortedSet接口
特点:无序不可重复,但是放在SortedSet集合中的元素可以自动排序,且按照从小到大的顺序排的。
三、Map接口
1、Map集合和Collection集合没有关系
2、Map集合以Key和value的这种键值对方式存储元素
3、key和value都是存储java对象的内存地址
4、所有Map集合的Key特点:无序不可重复
Map集合的Key和Set集合存储元素特点相同 (Map集合的key部分就是set集合)
①HashMap集合底层是哈希表数据结构
②SortedMap接口集合的key存储元素的特点:首先是无序不可重复的;另外放在SortedMap集合Key部分的元素会自动按照大小顺序排序,称为可排序的集合;TreeMap集合底层的数据结构是一个二叉树
四、collection中常用的方法
1、add(Object e)
向集合中添加元素
Collection c = new ArrayList(); // 多态
c.add(100); // 加的是对象的内存地址
c.add("haha");
c.add(true); // 可以添加boolean类型的
c.add(new Object); // 也可以这样
2、size()
获取集合中元素的个数
sout("集合中元素的个数是" + c.size()); // 输出4
3、contains();
判断集合中是否包含某元素
boolean flag = c.contains("绿巨人");
sout(flag); // 输出false;
4、 remove()
删除集合中某个元素
c.remove(100); // 移除了100
5、clear()
清空集合
c.clear() // 清空了整个集合
6、toArray()
将集合转换为Object类型的数组(也就是什么都可以往里放)
Object[] obj = c.toArray();
五、关于集合遍历/迭代专题(迭代就是遍历)
以下讲解的遍历/迭代方式是所有Collection通用的一种方式。
Collection c = new ArrayList();
C.add("abc");
C.add("esd");
C.add(123);
C.add(new Object());
Iterator it = c.iterator(); // 获取集合对象的迭代器Iterator
While(it.hasNext()){ // 遍历并输出集合元素
Object obj = it.next();
Sout(obj); // 依次输出集合元素
}
↑迭代器原理