Java_Collection
2020-04-03 本文已影响0人
老北瓜
Collection 集合
集合用来干啥 : 是java中提供的一种容器,用来存储多个数据
数组和集合的区别
~~数组的长度是固定的,集合的长度是可变的
~~数组可以存储基本类型 ,也可以存储对象。 集合存储的都是对象
String[] strArr = new String[3];
int[] intArr = new int[5];
/**
* 这里只可以存入对象
* int 不行 , 只能是 int 对应的 包装类 Integer
*/
ArrayList<Integer> aL = new ArrayList();
集合框架
1,会使用集合存储数据
2,会遍历集合
3,掌握集合特性
ArrayList集合 LinkedList集合 Vector集合
HashSet集合 LinkedHashSet集合 TreeSet集合
List 接口 :
有序的集合 (存储和取出元素顺序相同)
允许存储重复的元素
有所有关,可以使用普通for循环遍历
ArrayList : 底层是数组实现,查询快 增删慢
LinkedList : 底层是链表实现的,查询慢,增删快
Set接口 :
不允许存储重复元素
没有索引,不能使用普通for循环
HashSet: 底层是哈希表 +(红黑树)实现,无索引,不可以存储重复元素,存取无序
LinkedHashSet: 底层是哈希表+链表实现,无索引,不可以存储重复元素,可以保证存储顺序
TreeSet: 底层是二叉树实现,一般用于排序
(List接口和 Set 接口向上抽取)Collection 接口 :
单列集合顶层接口
Collection 中的共性方法
add(), remove(),clear(),contains(),isEmpty(), size(), toArray()
迭代器 Iterator 接口
通用的取出集合中元素的方法 。 取出元素之前先判断集合中有没有元素,有就取出来,接着判断集合中有没有元素,还有接着取,知道全部取出。
Collection接口中有一个方法 iterator() 返回的就是迭代器的实现类对象
常用方法 : hasNext() next()
/**
* 使用步骤:
* 1, 通过 集合的iterator()获取 实现类对象
* 2, Iterator.hasNext() 判断还有没有下一个元素
* 3,Iterator.next()取出集合中的下一个元素
*/
Collection<String> coll = new ArrayList<>();
coll.add("二狗");
coll.add("三狗");
coll.add("四狗");
coll.add("五狗");
coll.add("六狗");
Iterator<String> iterator = coll.iterator();
// 不知道多少个元素 , 知道循环条件,使用while循环
while (iterator.hasNext()) {
String next = iterator.next();
System.out.println(next);
}
// 或者使用 for循环
for (Iterator<String> it = coll.iterator(); it.hasNext(); ) {
System.out.println(it.next());
}
有几个元素就调用几次 hasNext() 判断, 直到取完。
增强for循环
专门那俩遍历数组和集合的,内部其实也是一个迭代器,遍历过程中不能进行增删操作 ,简化了 迭代器的书写
ArrayList<String> coll = new ArrayList<String>();
coll.add("aaa");
coll.add("bbb");
coll.add("ccc");
coll.add("ddd");
/**
* 格式 for(数据类型 变量名 : 集合名)
*/
for (String c :coll){
System.out.println(c);
}
List集合
有序 , 有索引 , 允许重复
特有的带 索引的几种方法
遍历的方法 普通 for循环 ,迭代器,增强for 循环
#####ArrayList
大小可变的数组的集合,不是同步的 ,也遵循数组查询快,增删慢。 实际开发中如果查询的需求较多,可以使用ArrayList,如果增删多,效率较低。
#####LinkedList
链表的实现,查询慢,增删快,也是异步的。
包含了大量操作收尾元素的方法,如果使用了多态不能使用LinkedList特有的方法。
特有的几个方法:
#####Vector
相当于一个同步的 ArrayList =======;
Set集合
不能重复 ,没有索引,所以不能使用普通for循环遍历
#####HashSet特点
不允许存储重复的元素
没有索引,没有索引的方法,就不能使用普通for循环遍历了
是一个无序的集合,存取的顺讯可能不一致
底层是一个哈希表结构,查询时速度非常快
#####哈希表
哈希值是一个十进制整数,有系统随机给出(就是对象的地址值,是一个逻辑地址)
哈希表 = 数组 + 链表