Java集合总结


collection

  1. collection实现子类可以存放多个元素,每个元素可以是Object
  2. 有些collection的实现类,可以存放重复的元素,有些不可以
  3. 有些Collection的实现类,有些是有序的(List),有些不是有序(Set)
  4. Collection接口没有直接的实现子类,是通过它的子接口Set 和 List来实现的

指令

Collections

命令解释
add添加单个元素
remove删除指定元素
contains查找元素是否存在
size获取元素个数
isEmpty判断是否为空
clear清空
addAll添加多个元素
containsAll查找多个元素是否都存在
removeAll删除多个元素

List

命令解释
get获取指定index位置的元素
indexOf返回obj在集合中首次出现的位置
lastIndexOf返回obj在当前集合中末次出现的位置
set(int index Object ele)设置指定index位置的元素为ele,相当于替换
List.subList(int fromIndex,int tolndex)返回从fromIndex到tolndex位置的子集合

Map

命令解释
put添加
remove根据键删除映射关系
get根据键获取值
size获取元素个数
isEmpty判断个数是否为空
clear清楚
containsKey查找键是否存在

Collection工具类

命令解释
reverse(List)反转List中元素的顺序
shuffle(List)对List集合元素进行随机排序
sort(List)根据元素的自然顺序对指定List集合元素按升序排序
sort(List,Comparator)根据指定的Comparator产生的顺序对List集合元素进行排序
swap(List,int,int)将指定list集合中的i处元素和j处元素进行交换
Object max(Collection)根据元素的自然顺序,返回给定集合中的最大元素
Object max(Collection,Comparator)根据Comparator指定的顺序,返回给定集合的最大元素
Object min(Collection)返回最小值
Object min(Collection,Comparator)根据Comparator指定的顺序,返回给定集合的最大元素
int frequency(Collection,Object)返回指定集合中指定元素的出现次数
void copy(List dest,List src)将src中的内容复制到dest中
boolean replaceAll(List list,Object oldVal,Object newVal)使用新值替换List对象的所有旧值

在这里插入图片描述

在这里插入图片描述
List

1、ArrayList

  1. ArrayList可以加入null,并且多个
  2. ArrayList是由数组来实现数据存储的
  3. ArrayList基本等同于Vector,除了ArrayList是线程不安全(执行效率高)在多线程情况下,不建议使用ArrayList
  4. ArrayList中维护了一个Object类型的数组elementData,transient Object[] elementData; //,表示该属性不会被序列号
  5. 当创建ArrayList对象时,如果使用的是无参构造器,则初始elementData容量为0,第1次添加,则扩容elementData为10,如需要再次扩容,则扩容elementData为1.5倍。
  6. 如果使用的是指定大小的构造器,则初始elementData容量为指定大小,如果需要扩容,则直接扩容elementData为1.5倍。


2、Vector

  1. Vector底层也是一个对象数组,protected Object[] elementData;
  2. Vector是线程同步的,即线程安全, Vector类的操作方法带有synchronized
  3. 在开发中,需要线程同步安全时,考虑使用Vector

在这里插入图片描述

3、LinkedList

  1. LinkedList底层实现了双向链表和双端队列特点
  2. 可以添加任意元素(元素可以重复),包括null
  3. 线程不安全,没有实现同步

如何选择ArrayList和LinkedList:

  1. 如果我们改查的操作多,选择ArrayList
  2. 如果我们增删的操作多,选择LinkedList
  3. 一般来说,在程序中,80%-90%都是查询,因此大部分情况下会选择ArrayList

List遍历

  1. iterator
  2. 增强for
  3. 普通for

Set实现类

  1. 无序(添加称取出的顺序不一致),没有索引
  2. 不允许重复元素,所以最多包含一个null

Set接口的常用方法
和List接口一样,Set接口也是Collection的子接口,因此,常用方法和Collection接口一样

Set接口的遍历方式
同Collection的遍历方式一样,因为Set接口是Collection接口的子接口。

  1. 可以使用迭代器
  2. 增强for
  3. 不能使用索引的方式来获取

HashSet

  1. set接口的实现类的对象(Set接口对象),不能存放重复的元素,可以添加一个null
  2. set接口对象存放数据是无序(即添加的顺序和取出的顺序不一致)
  3. 注意:取出的顺序的顺序虽然不是添加的顺序,但是他是固定
  4. 在执行add方法后,会返回一个boolean值
  5. 如果添加成功,返回 true,否则返回false
  6. 可以通过remove指定删除哪个对象


HashSet存储过程
1.HashSet底层是 HashMap
2.添加一个元素时,先得到hash值-会转成->索引值
3.找到存储数据表table,看这个索引位置是否已经存放的有元素
4.如果没有,直接加入
5.如果有,调用equals比较,如果相同,就放弃添加,如果不相同,则添加到最后
6.在Java8中,如果一条链表的元素个数到达TREEIFY_ THHRESHOLD(默认是8),并且table的大小>=
MIN TREEIFY CAPACITY(默认64),就会进行树化(红黑树)


TreeSet

TreeSet<String> treeSet = new TreeSet<String>(new Comparator<String>() {//使用匿名内部类
      @Override
      public int compare(String o1, String o2) {
           return 0;
      }
  });
}


Map

  1. Map与Collection并列存在。用于保存具有映射关系的数据:Key-Value
  2. Map中的key和value可以是任何引用类型的数据,会封装到HashMap$Node对象中
  3. Map 中的key不允许重复,原因和HashSet一样(HashSet底层实现就是HashMap,HashSet用key保存数据,value默认为空)
  4. Map中的value可以重复
  5. Map 的key可以为null, value 也可以为null,注意key为null,只能有一个,value为null ,可以多个
  6. 常用String类作为Map的key
  7. key 和 value之间存在单向一对一关系,即通过指定的key总能找到对应的value

遍历

public class Test {
    public static void main(String[] args) throws Exception {
        HashMap<String, String> map = new HashMap<>();
    
        Set<String> keys = map.keySet(); //遍历,得到所有key
    
        Collection<String> values = map.values(); //遍历,得到所有value

		//增强for,获得key与对应的value
        Set<Map.Entry<String, String>> entries = map.entrySet();
        for (Map.Entry<String, String> entry : entries) {
            entry.getKey();
            entry.getValue();
        }

		//迭代器,获得key与对应的value
        Iterator<Map.Entry<String, String>> iterator = entries.iterator();
        while (iterator.hasNext()){
            Map.Entry<String, String> next = iterator.next();
            next.getValue();
            next.getKey();
        }
    }
}


HashTable
1)存放的元素是键值对:即K-V
2) hashtable的键和值都不能为null,否则会抛出NullPointerExceptior
3)hashTable使用方法基本上和HashMap一样
4) hashTable是线程安全的,hashMap是线程不安全的

在这里插入图片描述

TreeMap

TreeMap<String, String> treeMap = new TreeMap<>(new Comparator<String>() { //比较器
    @Override
     public int compare(String o1, String o2) {
          return 0;
     }
});


List实现类

1.ArrayList

在这里插入图片描述

在这里插入图片描述

2. Vector

在这里插入图片描述
在这里插入图片描述

3. LinkList

在这里插入图片描述

在这里插入图片描述

List遍历方式

在这里插入图片描述

Set实现类

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

1. HashSet

在这里插入图片描述
在这里插入图片描述

HashSet存储过程

存储过程
在这里插入图片描述
在这里插入图片描述

LinkedHashSet

在这里插入图片描述
在这里插入图片描述

2. TreeSet

在这里插入图片描述

Map实现类

在这里插入图片描述
在这里插入图片描述

遍历方式
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1. HashMap

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2. HashTable

在这里插入图片描述
在这里插入图片描述

3. TreeMap

在这里插入图片描述

Colletions工具类

在这里插入图片描述
在这里插入图片描述

总结

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值