java集合怎么复习_复习-java集合简记

1.集合概述

ava集合类存放于 java.util 包中,是一个用来存放对象的容器。

集合只能保存对象(实际上也是保存对象的引用变量),Java主要由两个接口派生而出:Collection和Map,继承树如下:

4af845561d2813ab12b30945e82e74c3.gif

Map体系结构树

0eed5cb43d215f2708d98f3388d242d7.png

2 Collection集合常用方法:

//我们这里将 ArrayList集合作为 Collection 的实现类

Collection collection = newArrayList();//添加元素

collection.add("Tom");

collection.add("Bob");//删除指定元素

collection.remove("Tom");//删除所有元素

Collection c = newArrayList();

c.add("Bob");

collection.removeAll(c);//检测是否存在某个元素

collection.contains("Tom");//判断是否为空

collection.isEmpty();//利用增强for循环遍历集合

for(Object obj : collection){

System.out.println(obj);

}//利用迭代器 Iterator

Iterator iterator =collection.iterator();while(iterator.hasNext()){

Object obj=iterator.next();

System.out.println(obj);

}

遍历集合可以通过Iterator或者foreach遍历集合

3 Set接口

hashset是最常用的实现类

1、Set hashSet = new HashSet();

①、HashSet:不能保证元素的顺序;不可重复;不是线程安全的;集合元素可以为 NULL;

②、其底层其实是一个数组,存在的意义是加快查询速度。我们知道在一般的数组中,元素在数组中的索引位置是随机的,元素的取值和元素的位置之间不存在确定的关系,因此,在数组中查找特定的值时,需要把查找值和一系列的元素进行比较,此时的查询效率依赖于查找过程中比较的次数。而 HashSet 集合底层数组的索引和值有一个确定的关系:index=hash(value),那么只需要调用这个公式,就能快速的找到元素或者索引。

③、对于 HashSet: 如果两个对象通过 equals() 方法返回 true,这两个对象的 hashCode 值也应该相同。

1、当向HashSet集合中存入一个元素时,HashSet会先调用该对象的hashCode()方法来得到该对象的hashCode值,然后根据hashCode值决定该对象在HashSet中的存储位置

1.1、如果 hashCode 值不同,直接把该元素存储到 hashCode() 指定的位置

1.2、如果 hashCode 值相同,那么会继续判断该元素和集合对象的 equals() 作比较

1.2.1、hashCode 相同,equals 为 true,则视为同一个对象,不保存在 hashSet()中

1.2.2、hashCode 相同,equals 为 false,则存储在之前对象同槽位的链表上,这非常麻烦,我们应该约束这种情况,即保证:如果两个对象通过 equals() 方法返回 true,这两个对象的 hashCode 值也应该相同。

注意:每一个存储到 哈希 表中的对象,都得提供 hashCode() 和 equals() 方法的实现,用来判断是否是同一个对象

对于 HashSet 集合,我们要保证如果两个对象通过 equals() 方法返回 true,这两个对象的 hashCode 值也应该相同。

LinkHashSet也是根据元素hashcode值决定存储位置,同时使用链表维护元素次序,会根据元素的添加顺序来访问集合的元素,性能低于HashSet的性能

treeSet是Sorted接口的唯一实现,可以确保元素处于排序状态,底层使用 红黑树算法,擅长于范围查询。

*  如果使用 TreeSet() 无参数的构造器创建一个 TreeSet 对象, 则要求放入其中的元素的类必须实现 Comparable 接口所以, 在其中不能放入 null 元素

*  必须放入同样类的对象.(默认会进行排序) 否则可能会发生类型转换异常.我们可以使用泛型来进行限制

Set treeSet =new TreeSet();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值