|
bobf
发表于 2021-7-30 13:35
什么是集合?
集合是一种容器,用来保存一组数目不固定的数据,集合达到一定容量可以自动扩容 (如何实现自动扩容?) 集合只能保存引用类型的数据(为何只能保存引用类型的数据?),不能保存基本类型数据(集合中保存的永远是一个个的)
引用,决不能存放对象
如何操作集合?
1.向集合中添加数据: 2.在集合中查询数据:
3.从集合中删除数据:
4.遍历集合:
5.修改集合中的数据:
List集合:有序可以重复
添加数据:add();
保存数据的个数:size()
遍历集合:foreach(),Iterator() ( forEach底层用的是迭代器实现的 )
删除数据:remove()
Set集合:无序不可重复,添加的顺序和取出来的顺序不一致 .去处重复项(hashcode(),equals())
添加数据:add();
保存数据的个数:size()
遍历集合:foreach(),Iterator()
删除数据:remove()
在集合中使用泛型<> 规定集合中保存的类型
使用泛型时只可以声明集合变量的泛型类型,不能声明集合对象的泛型
重要规则:HashSet集合添加数据,查询数据,删除数据都要调该用对象的Hashcode和equals方法
TreeSet是按照二叉树的形式存放数据
1.存放数据的时候按照从左到右的顺序(左小右大)
2.提取数据的时候按照 左 中 右 的顺序
3.往TreeSet中添加自定义类型的数据
第一种:要实现comparable接口,重写comparto()方法
第二种:把比较规则从对象中提取出来,创建一个单独的比较器类(首选方式)
重要规则:TreeSet集合添加数据,查询数据,删除数据都要调用该对象的比较规则
List集合
ArrayList特点:
Array特点:是一块连续的内存空间,添加删除时要频繁的移动内存空间。添加删除速度慢,查询快
linkedList特点:以链表的形式存储(小学生过马路) 链表在添加删除的时候不需要移动内存空间:增删快,查询慢
Vactor:底层以数组的形式存放数据,stack继承vactor:后进先出的栈类
如何实现一个高效的后进先出的栈,
1.用数组实现
2.直接使用java.util.Stack类
3.用linkedList来实现 (正确的)
通过聚合代码复用原则实现代码复用是最佳的方式
Iterator 可以在遍历集合的时候删除数据
ListIterator可以在遍历集合的时候删除数据,添加数据,修改数据。可以按正反双方向遍历集合
Map集合:
一对一对的存储,一个key对应一个value。key无序不可重复,value可以重复
1.向集合中添加数据: put( key,value)
2.在集合中查询数据: contains( key ) ,是否包含key---------contains( value ) ,是否包含value
3.从集合中删除数据: remove()
4.遍历集合:
取出map集合中所有value-----values()返回一个collection集合
取出map集合中所有的key-----keySet()返回一个set集合
通过key得到value-----getKey()
取出所有的Entry-----entrySet()返回一个set集合
5.修改集合中的数据:put( key,value)
6.数据的对数: size()
Hashmap和hashtable的相同点都要求作为key的类必须覆盖hashcode,equals()
hashMap是新集合,非线程安全的,速度快
hashTable是老集合,线程安全的,速度慢
|
免费评分
-
查看全部评分
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|