Hi i,m JinXiang
⭐ 前言 ⭐
本篇文章主要介绍集合框架的两个接口超级详细介绍,集合框架的使用以及部分理论知识
欢迎点赞 收藏 ⭐留言评论 私信必回哟
博主收将持续更新学习记录获,友友们有任何问题可以在评论区留言
目录
⭐ 什么是集合?
Java集合体系框架:
Collection派生出了两个子接口:
集合Map:
⭐ 为什么使用集合
相对比于数组:
使用集合框架的好处:
⭐ 使用集合框架:
一、Collection基本概念:
二、Collection类的解释与使用:
Java集合List
List集合特点
实现类:ArryList
实现类:vector
实现类:LinkedList
Java List总结
三、Map的基本概念
Map的4个实现类:
2、Hashtable
3、LinkedHashMap
4、TreeMap
四、Map类的使用:
1、添加
2、删除
3、修改
4、查询
5、增强循环(遍历)
集合是Java中提供的一种容器,可以用来存储多个数据,根据不同存储方式形成的体系结构,就叫做集合框架体系(掌握)。集合也时常被称为容器。
Java集合类主要由两个根接口Collection和Map派生出来的。如上图,左边的Collection接口为单列集合的接口,右边的Map接口为双列集合的接口,下面分别对应他们的子接口以及对应的实现类。
Map用于保存具有映射关系的数据,Map里保存着两组数据:key和value,它们都可以使任何引用类型的数据,但key不能重复。
但是对于数组以上的三点缺陷,在集合中就得到了很好的解决。
集合的长度可变的。
使用Java类封装出一个个容器类,开发者只需要直接调用即可,不用再手动创建容器类。
Collection: 层次结构 中的根接口。Collection 表示一组对象,这些对象也称为 collection 的元素。一些 collection 允许有重复的元素,而另一些则不允许。一些 collection 是有序的,而另一些则是无序的。JDK 不提供此接口的任何直接 实现:它提供更具体的子接口(如 Set 和 List)进行实现。
集合中的元素允许重复
集合中的元素是有顺序的,各元素插入的顺序就是各元素的顺序
集合中的元素可以通过索引来访问或者设置
ArrayList的底层结构:是一个数组,根据索引定位元素快,增加、删除操作需要数组的移位,第一次创建集合并添加一个元素时,底层就会创建一个大小为10的数组。
面试题;vector与ArrayList的区别?
1、底层的扩容机制不同:vector扩容为原数组的两倍,而ArrayList扩容为原数组的1.5倍。
2、内部实现机制不同:vector类的操作方法采用的都是synchronize同步处理,线程安全但效率低。ArrayList类的操作方法却并没有采用synchronize同步处理,线程不安全但效率高。
LinkedList的底层结构:是一个双向链表,可以充分利用碎片化空间进行存储,查找,修改数据的时间复杂度都是O(n),因为都要遍历整个链表。
1==):ArrayList
优点: 底层数据结构是数组,查询快,增删慢。
缺点: 线程不安全,效率高
2==):Vector
优点: 底层数据结构是数组,查询快,增删慢。
缺点: 线程安全,效率低
3==):LinkedList
优点: 底层数据结构是链表,查询慢,增删快。
缺点: 线程不安全,效率高
一般的,我们依然习惯把Map称之为集合,不过要注意区分,Set和List是单元素集合,Map是双元素集合。
注意:
1、Map接口并没有继承于Collection接口也没有继承于Iterable接口,所以不能直接对Map使用for-each操作。
2、如果不能理解Map的结构,就直接记住Map每次需要存储两个值,一个是key,一个是value,其中value表示存储的数据,而key就是这一个value的名字。
1、HashMap
Map接口基于哈希表的实现,是使用频率最高的用于键值对处理的数据类型。
Hashtable和HashMap从存储结构和实现来讲有很多相似之处,而且是线程安全的。
LinkedHashMap继承了HashMap,是Map接口的哈希表和链接列表实现,它维护着一个双重链接列表,此链接列表定义了迭代顺序,该迭代顺序可以是插入顺序或者是访问顺序。
TreeMap实现SortMap接口,能够把它保存的记录根据键排序,默认是按键值的升序排序(自然顺序)
敲黑板!重点:Map中得每个元素属于键值对模式。
如果往map中添加元素时 需要添加key 和 value. 它也属于一个接口,该接口常见得实现类有: HashMap. Map中key有唯一性的特点,不能重复。
import java.util.HashMap;
import java.util.Map;
public class dome {
public static void main(String[] args) {
Map map = new HashMap<>();
Map map1 = new HashMap<>();
map.put("name","张三");
map.put(18,12);
map.put("age",19);
//因为 Map具有唯一不能重复的特性,所以后者会把前者覆盖
map.put("name","李四");
map1.put("name","王五");
map1.put("age","20");
//如果指定得key存在,则不放入map中,如果不存在则放入map中
map.putIfAbsent("age",28) ;
System.out.println(map);
System.out.println(map);
//将 map1 中的每一个元素都添加到 map中,如果其中 key值重复,会将前者覆盖
map.putAll(map1);
System.out.println(map);
}
}
//根据 key 来删除元素
map.remove(18);
System.out.println(map);
//清空整个容器
map.clear();
System.out.println(map);
//根据 key值来修改元素,但是我们可以直接使用添加功能将前者覆盖可以达到相同效果
map.replace("name","刘德华");//替换元素
System.out.println(map);
//判断Map中是否有指定的key
boolean a = map.containsKey("name");
System.out.println(a);
//根据指定的key返回 相应的Value值
Object b = map.get("name");
System.out.println(b);
//返回这个Map 中的所有 key
Set s = map.keySet();
System.out.println(s);
//返回这个Map 中的所有 key
Set s = map.keySet();
System.out.println(s);
for(Object k:s){
Object value= map.get(k);//
System.out.println(k+"================>"+value);
}
总结不易,希望uu们不要吝啬亲爱的哟(^U^)ノ~YO!!如有问题,欢迎评论区批评指正