java集合入门总结 -ag凯发k8国际
1.集合容器的概述
2.collection接口
3.list接口
4.set接口
5.map接口
1.1.什么是集合
集合框架:用于存储数据的容器。
集合框架是为表示和操作集合而规定的一种统一的标准的体系结构。
任何集合框架都包含三大块内容: 对外的接口、接口的实现和对集合运算的算法
集合框架通过提供有用的数据结构和算法使你能集中注意力于你的程序的重要部分上,而不是为了让程序能正常运转而将注意力于低层设计上。
通过这些在无关api之间的简易的互用性,使你免除了为改编对象或转换代码以便联合这些api而去写大量的代码。 它提高了程序速度和质量。
1.2.集合的特点:
1.对象封装数据,对象多了也需要存储。集合用于存储对象。
2.对象的个数确定可以使用数组,对象的个数不确定的可以用集合。因为 集合是可变长度的。
1.3.使用集合框架的好处
1.容量自增长;
2.提供了高性能的数据结构和算法,使编码更轻松,提高了程序速度和质量;
3.允许不同 api 之间的互操作,api之间可以来回传递集合;
4.可以方便地扩展或改写集合,提高代码复用性和可操作性。
5.通过使用jdk自带的集合类,可以降低代码维护和学习新api成本。
1.4.常用常用的集合类
map接口和collection接口是所有集合框架的父接口
- 1.collection接口的子接口包括:set接口和list接口
- 2.map接口的实现类主要有:hashmap、treemap、hashtable、concurrenthashmap以及properties等
- 3.set接口的实现类主要有:hashset、treeset、linkedhashset等
- 4.list接口的实现类主要有:arraylist、linkedlist、stack以及vector等
1.5.集合框架底层数据结构
集合底层原理arraylist | object数组 |
vector | object数组 |
linkedlist | 双向循环链表 |
hashset(无序,唯一) | 基于 hashmap 实现的,底层采用 hashmap 来保存元素 |
linkedhashset | linkedhashset 继承与 hashset,并且其内部是通过 linkedhashmap 来实现的。有点类似于我们之前说的linkedhashmap 其内部是基于 hashmap 实现一样,不过还是有一点点区别的。 |
treeset(有序,唯一) | 红黑树(自平衡的排序二叉树。) |
hashmap | dk1.8之前hashmap由数组 链表组成的,数组是hashmap的主体,链表则是主要为了解决哈希冲突而存在的(“拉链法”解决冲突).jdk1.8以后在解决哈希冲突时有了较大的变化,当链表长度大于阈值(默认为8)时,将链表转化为红黑树,以减少搜索时间 |
linkedhashmap | linkedhashmap 继承自 hashmap,所以它的底层仍然是基于拉链式散列结构即由数组和链表或红黑树组成。另外,linkedhashmap 在上面结构的基础上,增加了一条双向链表,使得上面的结构可以保持键值对的插入顺序。同时通过对链表进行相应的操作,实现了访问顺序相关逻辑。 |
hashtable | 数组 链表组成的,数组是 hashmap 的主体,链表则是主要为了解决哈希冲突而存在的 |
treemap | 红黑树(自平衡的排序二叉树) |
1.8.集合和数组的区别
3.1特点
java.util.list接口继承自collection接口,在list集合元素可重复、元素有序。所有的元素是以一种线性方式进行存储的,在程序中可以通过索引来访问集合中的指定元素,而且元素的存入顺序和取出顺序一致。
3.2list里边常用的方法:
3.3list的子类
1.arraylist集合
(1)特点:
java.util.arraylist集合数据存储的结构是数组结构。元素增删慢,查找快,由于日常开发中使用最多的功能为查询数据、遍历数据,所以arraylist是最常用的集合。
(2)优缺点:
arraylist的优点如下:
arraylist 底层以数组实现,是一种随机访问模式。arraylist 实现了 randomaccess 接口,因此查找的时候非常快。
arraylist 在顺序添加一个元素的时候非常方便。
arraylist 的缺点如下:
删除元素的时候,需要做一次元素复制操作。如果要复制的元素很多,那么就会比较耗费性能。
插入元素的时候,也需要做一次元素复制操作,缺点同上。
arraylist 比较适合顺序添加、随机访问的场景。
深入了解看:arraylist集合源码详解
2.linkedlist集合
(1)特点:
java.util.linkedlist集合数据存储的结构是链表结构。元素增删快,查找慢的集合
详细看:linkedlist集合详解
3.arraylist和linkedlist对比:
4.list三种遍历方式
(1)第一种for循环
基于计数器。在集合外部维护一个计数器,然后依次读取每一个位置的元素,当读取到最后一个元素后停止
package untl; import java.util.arraylist; import java.util.collections; import java.util.list; public class myobject {public static void main(string[] args) {list<string> list=new arraylist();collections.addall(list,"aaa","bbb","ccc","ddd");for (int i = 0; i <list.size() ; i) {system.out.println(list.get(i));}} } 运行结果: aaa bbb ccc ddd(2).第二种foreach循环
foreach 内部也是采用了 iterator 的方式实现,使用时不需要显式声明 iterator 或计数器。优点是代码简洁,不易出错;缺点是只能做简单的遍历,不能在遍历过程中操作数据集合,例如删除、替换。
package untl; import java.util.arraylist; import java.util.collections; import java.util.list; public class myobject {public static void main(string[] args) {list<string> list=new arraylist();collections.addall(list,"aaa","bbb","ccc","ddd");for (string str:list) {system.out.println(str);}} } aaa bbb ccc ddd(3).第三种迭代器iterator
iterator 是面向对象的一个设计模式,目的是屏蔽不同数据集合的特点,统一遍历集合的接口。java 在 collections 中支持了 iterator 模式。
package untl; import java.util.arraylist; import java.util.collections; import java.util.iterator; import java.util.list; public class myobject {public static void main(string[] args) {list<string> list=new arraylist();collections.addall(list,"aaa","bbb","ccc","ddd");for (iterator<string> iterator=list.iterator();iterator.hasnext();){string str=iterator.next();system.out.println(str);}} } 运行结果: aaa bbb ccc ddd5.list子类与数组之间相互转换
数组转 list:使用 arrays. aslist(array) 进行转换。
list 转数组:使用 list 自带的 toarray() 方法。
例子:
package untl; import java.util.*; public class myobject {public static void main(string[] args) {list<string> list1=new arraylist<string>();collections.addall(list1,"aaa","bbb","ccc","ddd");object arr[] = list1.toarray();//这里返回object类型数组for (object str:arr){system.out.println(str);}system.out.println("---------------------------------------------");list list2= arrays.aslist(arr);for (iterator<string> iterator=list2.iterator();iterator.hasnext();){string str=iterator.next();system.out.println(str);}} } 运行结果: aaa bbb ccc ddd --------------------------------------------- aaa bbb ccc ddd4.1set接口特点
java.util.set接口和java.util.list接口一样,同样继承自collection接口,它与collection接口中的方法基本一致,并没有对collection接口进行功能上的扩充,只是比collection接口更加严格了。与list接口不同的是,set接口中元素无序且不重复,刚好全与list相反,set会以某种规则保证存入的元素不出现重复。
4.2set接口常用方法
4.3set接口的子类
1.hashset
java.util.hashset是set接口的一个实现类,它所存储的元素是不可重复、无序(即存取顺序不一致)。java.util.hashset底层的实现其实是一个java.util.hashmap支持。
详细看:hashset详解
5.1map接口的特点:
map 是一种把键对象和值对象映射的集合,它的每一个元素都包含一对键对象和值对象。 map没有继承于collection接口,从map集合中检索元素时,只要给出键对象,就会返回对应的值对象。
5.2map接口的常用方法:
5.3map接口的子类:
1.hashmap
详细看:hashmap详解
2.linkedhashmap
详细看:linkedhashmap详解
3.treemap
详细看:treemap详解
总结
以上是ag凯发k8国际为你收集整理的java集合入门总结的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: java集合 linkedlist的原理
- 下一篇: 34篇java基础总结博客陪博主入门ja