Java集合之Collection

Collection接口常用方法

方法描述
add(Object obj)添加元素
addAll(Collection coll)添加一个集合
int size()获取有效元素个数
void clear()清空集合
boolean isEmpty()是否为空集合
boolean contains(Object obj)是否包含某个元素,是通过元素的equals方法来判断是否是同一个对象
boolean containsAll(Collection c)是否包含某个元素,也是调用元素的equals方法来比较的。用两个两个集合的元素逐一比较
boolean remove(Object obj)删除,通过元素的equals方法判断是否是要删除的那个元素。只会删除找到的第一个元素
boolean removeAll(Collection coll)删除,取当前集合的差集
boolean retainAll(Collection c)取两个集合的交集,把交集的结果存在当前的集合中,不影响c
boolean equals(Object obj)集合是否相等
Object [] toArray()转换成对象数组
hashCode()获取集合对象的哈希值

List接口常用方法

特点:可重复,允许null

方法描述
void add(int index, Object ele)在index位置插入ele元素
boolean addAll(int index, Collection eles)从index位置开始将eles中的所有元素添加进来
Object get(int index)获取指定index位置的元素
int indexOf(Object obj)返回obj在集合中首次出现的位置
int lastIndexOf(Object obj)返回obj在当前集合中末次出现的位置
Object remove(int index)移除指定index位置(0是第一个元素)的元素,并返回此元素
Object set(int index, Object ele)设置指定index位置的元素为ele
List subList(int fromIndex, int toIndex)返回从fromIndex到toIndex位置的子集合

三种遍历方式

public void test(){
	public statis void main(String[] args){
	    ArrayList list = new ArrayList();
	    list.add(123);
	    list.add(456);
	    list.add("AA");
	    //方式一:Iterator迭代器方式
	    Iterator iterator = list.iterator();
	    while(iterator.hasNext()){
	        System.out.println(iterator.next());
	    }
	    //方式二:增强for循环,底层就是Iterator迭代器
	    for(Object obj : list){
	        System.out.println(obj);
	    }
	    //方式三:普通for循环
	    for(int i = 0;i < list.size();i++){
	        System.out.println(list.get(i));
	    }
	 }
}

List实现类之ArrayList

  • 可重复,允许null,添加顺序和输出顺序一致
  • ArrayList是List接口的典型实现类、主要实现类
  • 本质上,ArrayList是对象引用的一个”变长”数组
  • Array Listi的JDK 1.8之前与之后的实现区别?
    JDK 1.7:ArrayList像饿汉式,直接创建一个初始容量为10的数组
    JDK 1.8:ArrayList像懒汉式,一开始创建一个长度为0的数组,当添加第一个元素时再创建一个始容量为10的数组
  • 线程不安全,查询速度快,增删较慢
  • 扩容机制
    每次按照原来容量的1.5倍扩容

List实现类之LinkedList

新增方法

方法描述
void addFirst(Object obj)在链表头部插入一个元素
void addLast(Object obj)在链表尾部添加一个元素
Object getFirst()获取第一个元素
Object getlast)(),获取最后一个元素
Object removeFirst()删除头,获取元素并删除
Object removeLast()删除尾
  • 可重复,允许null,添加顺序和输出顺序一致,可以当双向队列使用
  • 对与对于频繁的插入和删除元素操作,建议使用LinkedList类,效率更高
  • Linkedlist:双向链表,内部没有声明数组,而是定义了Node类型的frst和last,用于记录首末元素。同时,定义内部类Node,作为 Linkedlist中保存数据的基本结构。Node除了保存数据,还定义了两个变量:
    prev变量记录前一个元素的位置
    next变量记录下一个元素的位置
  • LinkedList 是非线程安全的,并发环境下,多个线程同时操作 LinkedList,会引发不可预知的错误

List实现类之Vector

  • Vector大多数操作与ArrayList相同,区别在于Vector是线程安全的,性能比ArrayList低
  • 在各种list中,最好把ArrayList作为默认选择。当插入、删除频繁时,使用LinkedList;Vector总是比ArrayList慢,所以尽量避免选择使用。
  • JDK 7.0和JDK 8.0中通过Vector()构造器创建对象时,底层都创建了长度为10的数组。
  • 扩容机制
    默认扩容为原来的数组长度的2倍

Set

特点:无序,不可重复,有且仅有添加一个null,不能通过索引遍历

遍历:

两种方式:
方式一:迭代器
方式二:增强for

Set实现类之HashSet

底层实际是HashMap,由于使用的是Map,那么map键值对中的key是存储的数据,而map中的value值始终是PRESENT(共享)
HashSet的底层结构:哈希表=数组+链表+红黑树
从JDK1.8开始,如果链表的长度超过8且数组长度大于64,链表会自动转换成红黑树,小于6时转换为链表
当链表长度为8时,数组长度小于64时,会对数组进行原来的倍扩容

HashSet存储的原理:

  1. 在向HashSet中存储对象时,会先调用这个对象的hashCode() ((h = key.hashCode())^(h>>>16)来获取它的哈希值,如果集合中没有任何一个对象的哈希值与这个要存储的对象的哈希值相同,则直接存储新元素
  2. 如果这个对象的哈希值与集合中的某个对象的哈希值相同,就会调用equals()来比较内容,如果结果为true,则不存储;反之,则存储

HashSet的扩容:

  1. 在创建HashSet会获取一个加载因子DEFAULT_LOAD_FACTOR0.75
  2. 在添加第一个元素时,会创建一个长度为16的数组,并设 置临界值为12(16 * 0.75),在添加第12个元素后,会将数组的大小和临界值都扩大到原来的

Set实现类之LinkedHashSet

同时也是HashSet的子类
底层是一个LinkedHashMap,数据结构是依然哈希表,只是每个元素又额外的多了一个双链表的机制记录存储的顺序。由于LinkedHashSet维持了一个双向链表所以输入和输出一致(有序)
不允许添加重复元素,有序,无索引

Set实现类值TreeSet

不允许添加重复元素、无索引、可排序
可排序:按照元素的大小默认升序(有小到大)排序。
TreeSet集合底层是基于红黑树的数据结构实现排序的,增删改查性能都较好。
注意:TreeSet集合是一定要排序的,可以将元素按照指定的规则进行排序。

默认排序规则:
1、数值类型:Integer , Double,官方默认按照大小进行升序排序。
2、字符串类型:默认按照首字符的编号升序排序。
3、自定义类型:TreeSet无法直接排序, 需要制定排序规则

1、实现Comparable接口, 并重写compareTo方法来定制比较规则
2、有参数构造器Comparator<>()自带比较器对象,来进行定制比较规则, 并且该方法如果和方法1同时出现, 会优先使用此方法的比较规则(就近)。

Collections工具类

Collections是一个操作SetListMap等集合的工具类
Collections中提供了一个一系列静态的方法对集合元素进行排序、查询和修改等操作

常用方法:

  • 排序:
方法描述
reverse(List)反转List中的元素
shuffle(List)对List中的元素进行随机排序
sort(List)按照元素的自然排序对指定List集合按升序排序
sort(List,Comparator)根据指定的Comparator产生的顺序对List集合进行排序
swap(List l,int i, int j)将指定List集合中的i处元素和j处元素进行交换
  • 查找、替换
方法描述
Object max/min(Collecton)根据元素的自然排序,返回给指定集合中的最大/小元素
Object max/min(Coolection,Comparator)根据Comparator指定的排序规则,返回给指定集合中的最大/小元素
int frequency(Collection,Object)返回指定集合中指定元素出现的次数
boolean replaceAll(List list, T oldVal, T newVal)使用新值替换掉List对象的所有旧值
void copy(List dest,List src)src中的内容复制到dest
  • 添加
方法描述
addAll(Collection c, E…e)将所有元素E加入到集合c
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值