【Java 入门】(三)集合

导读:本篇文章讲解 【Java 入门】(三)集合,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

重点掌握

List:ArrayList

Map:HashMap、TreeMap

Set:HashSet

使用场景

ArrayList:有序集合,底层数据结构是数组,查询快,增删慢,线程不安全,效率高,可以存储重复元素。

//字符串集合
List<String> list = new ArrayList<String>();
list.add("张三");
list.add("李四");
list.add("王五");
//可重复
list.add("张三");

System.out.println(sites); // [张三, 李四, 王五,张三]


//适用于通过下标获取数据结构中的元素,如需获取第二个元素
String content = list.get(1);
System.out.println(content); // 李四

HashMap:散列表,它存储的内容是键值对(key-value)映射,根据键的 HashCode 值存储数据,具有很快的访问速度,最多允许一条记录的键为 null,不支持线程同步。

//构造参数填"4"和不填的区分,可自行查阅资料
Map<Integer, String> map = new HashMap<Integer, String>(4);
// 添加键值对
map.put(1, "张三");
map.put(2, "李四");
map.put(3, "王五");
System.out.println(map); // {1=张三, 2=李四, 3=王五}

//覆盖key为2的值
map.put(2, "刘六");
System.out.println(map); // {1=张三, 2=刘六, 3=王五}


//适用于通过元素对象的"特征"查找对应的元素,如需通过元素对象的编码获取对应的值
String content = map.get(2); // 获取编号为2的值
System.out.println(content); // 李四

TreeMap:非线程安全基于红黑树实现,与HashMap相比,TreeMap是一个能比较元素大小的Map集合,会对传入的key进行了大小排序。其中,可以使用元素的自然顺序,也可以使用集合中自定义的比较器来进行排序。

//适用于按自然顺序或自定义顺序遍历键(key),按照字典序输出可采用TreeMap方式实现

HashSet:底层数据结构采用哈希表实现,元素无序且唯一,线程不安全,效率高,可以存储null元素,元素的唯一性是靠所存储元素类型是否重写hashCode()和equals()方法来保证的。

Set<String> set = new HashSet<String>();

set.add("张三");
set.add("李四");
set.add("王五");
//重复项
set.add("李四");

System.out.println(set); // [张三,李四,王五]


//适用于对元素集合做去重处理

遍历方式

《阿里巴巴 Java 开发手册》的描述如下:

不要在 foreach 循环里进行元素的 remove/add 操作。remove 元素请使用 Iterator 方式,如果并发操作,需要对 Iterator 对象加锁。

通过反编译会发现 foreach 语法糖底层其实还是依赖 Iterator 。不过, remove/add 操作直接调用的是集合自己的方法,而不是 Iterator 的 remove/add方法,有兴趣可以看一下源码。

这就导致 Iterator 莫名其妙地发现自己有元素被 remove/add ,然后,它就会抛出一个 ConcurrentModificationException 来提示用户发生了并发修改异常。

Java8 开始,可以使用 Collection#removeIf()方法删除满足特定条件的元素

List<Integer> list = new ArrayList<>();
for (int i = 1; i <= 10; ++i) {
    list.add(i);
}
list.removeIf(filter -> filter % 2 == 0); // 删除list中的所有偶数
System.out.println(list); // [1, 3, 5, 7, 9] 

所以一般遍历集合推荐使用Iterator迭代器,或者是使用普通的for循环。如果不需要操作元素,就怎么方便怎么来都行。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/93632.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!