java学习之collection集合

colletion集合

一、集合
在这里插入图片描述

存储一个元素集合,Collection 接口又有 3 种子类型,List、Set 和 Queue,再下面是一些抽象类,最后是具体实现类;
Collection的实现类只能存储引用类型,所以对于基本数据类型,Collection的实现类只能存储他们的包装类(位于java.lang包)
Java中共有八个包装类:
1.Byte(byte) 2.Short(short) 3.Integer(int) 4.Long(long)
5.Float(float) 6.Double(double) 7.Boolean(boolean) 8.Character(char)

任何对象加入集合类后,如果集合没有使用泛型,会自动转变为Object类型,在取出的时候,需要进行强制类型转换;使用泛型之后不用强制转换。

二、set集合
Set接口的实现类存储的数据是无序的,元素不重复的
实例:

//创建一个Set集合
Set<String> set = new HashSet<>();
//判断集合是否为空 null
System.out.println(set.isEmpty());
//集合增加元素
set.add("a");
set.add("b");
//判断集合中是否存在指定元素
boolean tar = set.contains("c");
System.out.println(tar);
//迭代器 遍历集合中的元素
Iterator<String> iterator = set.iterator();
while (iterator.hasNext()) {//判断是否有下一行数据
System.out.println(iterator.next());
}
//删除集合中的元素
set.remove("a");
//查看集合中的所有元素
for (String str : set) {
	System.out.println(str);
}
//集合的大小:集合中的元素个数
int size = set.size();
System.out.println(size);
//清空集合
set.clear();
System.out.println(set.toString());

三、list集合
List接口的实现类存储的数据是有序的,元素可重复的;
List接口主要有两个实现类:ArrayList和LinkedList;
LinkedList与ArrayList的区别:

  1. ArrayList是实现了基于动态数组的数据结构,在未声明长度的情况下,默认长度是10,数据溢出自动扩充。
  2. LinkedList基于链表的数据结构。
  3. 对于随机访问get和set(即查找元素),ArrayList觉得优于LinkedList,因为LinkedList要移动指针。
  4. 对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。
    四、map集合
    1、基本概念
    Map中存储键值对(Key-Value)
    HashMap是Map接口的实现类,该类根据键的hashcode值存储数据
    Map的特点:
  5. key和value只能是引用类型的数据
  6. Map的key不允许重复
  7. 多次给同一个键名赋值,后面的会把前面的赋值覆盖
    实例:
//创建一个Map<Key,Value>
Map<Integer, String> map = new HashMap<Integer, String>();
//添加记录
map.put(1, "tom");
map.put(2, "jerry");
//根据键key获取数据
System.out.println(map.get(1));
//获取所有键的集合
Set<Integer> set = map.keySet();
//遍历map所有的值
for (Integer key : set) {
	System.out.println(key); //打印键名
	System.out.println(map.get(key)); //根据键名获取值
}
Map<String, Integer> m2 = new HashMap<String, Integer>();
m2.put("张三", 90);
m2.put("李四", 20);
//取值
System.out.println(m2.get("李四"));
//根据键key删除键值对
m2.remove("张三");
//判断key键是否存在
boolean tar = m2.containsKey("张三");
//判断value值是否存在
boolean tar2 = m2.containsValue(20);
//获取map集合的元素个数
int len = m2.size();
System.out.println(len);
//打印map中的元素
System.out.println(m2.toString());
//获取所有的值的集合
Collection<Integer> list3 = m2.values();
for (Integer integer : list3) {
	System.out.println(integer);
}

2、HashMap实现原理
数组加链表,jdk1.8之后又加入了红黑树
在这里插入图片描述

  1. HashMap底层就是一个数组结构,数组中的每一个元素又是一个链表。当新建一个HashMap的时候,就会初始化一个数组。
  2. 允许null值和null键
  3. Entry就是数组中的元素(k-v),每个Map.Entry 其实就是一个key-value键值对,它持有一个指向下一个元素的引用,这就构成了链表
  4. 当添加一个元素(key-value)时,首先计算元素的key的hash值,以此来确定插入数组中的位置;
  5. 如果hash值相同,这时就添加到同一个hash值(hashCode)的元素的后面,他们在数组的同一位置,于是形成了链表
  6. 当链表长度大于8且元素(k-v)个数超过64时,链表就转换为红黑树,这样就提高了查找的效率;
  7. 当红黑树中的节点个数小于6时,红黑树又重新转换为链表;
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值