代码编织梦想

目录

1.Collection和Collections区别

2.Set和List区别

3.ArrayList和LinkedList和Vector的区别

4.Set如何保证元素不重复

5.Arrays.asList获得的List使用时需要注意什么


1.Collection和Collections区别

        Collection 是一个集合接口。 它提供了对集合对象进行基本操作的通用接口方法。Collection接口在Java 类库中有很多具体的实现。是list,set等的父接口。

        Collections 是一个包装类。 它包含有各种有关集合操作的静态多态方法。此类不能实例化,就像一个工具类,服务于Java的Collection框架。

        日常开发中,不仅要了解Java中的Collection及其子类的用法,还要了解Collections用法。可以提升很多处理集合类的效率。

2.Set和List区别

List,Set都是继承自Collection接口。都是用来存储一组相同类型的元素的。

List特点:元素有放入顺序,元素可重复 。有顺序,即先放入的元素排在前面。

Set特点:元素无放入顺序,元素不可重复。

无顺序,即先放入的元素不一定排在前面。 不可重复,即相同元素在set中只会保留一份。所以,有些场景下,set可以用来去重。 不过需要注意的是,set在元素插入时是要有一定的方法来判断元素是否重复的。这个方法很重要,决定了set中可以保存哪些元素。

3.ArrayList和LinkedList和Vector的区别

List主要有ArrayList、LinkedList与Vector几种实现。

这三者都实现了List 接口,使用方式也很相似,主要区别在于因为实现方式的不同,所以对不同的操作具有不同的效率。

ArrayList 是一个可改变大小的数组.当更多的元素加入到ArrayList中时,其大小将会动态地增长.内部的元素可以直接通过get与set方法进行访问,因为ArrayList本质上就是一个数组.

LinkedList 是一个双链表,在添加和删除元素时具有比ArrayList更好的性能.但在get与set方面弱于ArrayList.

当然,这些对比都是指数据量很大或者操作很频繁的情况下的对比,如果数据和运算量很小,那么对比将失去意义.

Vector 和ArrayList类似,但属于强同步类。如果你的程序本身是线程安全的(thread-safe,没有在多个线程之间共享同一个集合/对象),那么使用ArrayList是更好的选择。

Vector和ArrayList在更多元素添加进来时会请求更大的空间。Vector每次请求其大小的双倍空间,而ArrayList每次对size增长50%.

而 LinkedList 还实现了 Queue 接口,该接口比List提供了更多的方法,包括 offer(),peek(),poll()等.

注意: 默认情况下ArrayList的初始容量非常小,所以如果可以预估数据量的话,分配一个较大的初始值属于最佳实践,这样可以减少调整大小的开销。

4.Set如何保证元素不重复

在Java的Set体系中,根据实现方式不同主要分为两大类。HashSet和TreeSet。

1、TreeSet 是二叉树实现的,TreeSet中的数据是自动排好序的,不允许放入 null值
2、HashSet 是哈希表实现的,HashSet中的数据是无序的,可以放入 null值,但只能放入一个null,两者中的值都不能重复,就如数据库中的唯一约束

在HashSet中,基本的操作都是由HashMap底层实现的,因为HashSet底层是用HashMap存储数据的。当向HashSet中添加元素的时候,首先计算元素的hashCode值,然后通过扰动计算和按位与的方式计算出这个元素的存储位置,如果这个位置为空,就将元素添加进去;如果不为空,则用equals方法比较元素是否相等,相等就不添加,否则找一个空位添加。

TreeSet的底层是TreeMap的keySet(),而TreeMap是基于红黑树实现的,红黑树是一种平衡二叉查找树,它能保证任何一个节点的左右子树的高度差不会超过较矮的那棵的一倍。

TreeMap是按key排序的,元素在插入TreeSet时compareTo()方法要被调用,所以TreeSet中的元素要实现Comparable接口。TreeSet作为一种Set,它不允许出现重复元素。TreeSet是用compareTo()来判断重复元素的。

5.Arrays.asList获得的List使用时需要注意什么

  1. asList 得到的只是一个 Arrays 的内部类,一个原来数组的视图 List,因此如果对它进行增删操作会报错

  2. 用 ArrayList 的构造器可以将其转变成真正的 ArrayList


         人永远不要因为生气而说刻薄的话,你的怒气会过去,但是你的刻薄话会伤人-一生。所以要么说良善的言语,要么保持沉默,成年了,要学会控制自己的情绪,温柔说话。如果吼叫能解决问题,驴将统治世界。——稻盛和夫

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/L170311/article/details/129656977

java基础系列——集合类_jian.zhang的博客-爱代码爱编程_java基础 集合类

前言:java基础的细节比较多,脑子不够用,经常忘记一些知识点,所以花费了几天时间,做了一些笔记。 集合类与数组的不同之处是数组的长度是固定的,集合的长度是可变的,这也是集合的特点之一。 常用的集合类的继承关

java集合对象声明_Java基础————集合类-爱代码爱编程

原标题:Java基础————集合类 理解集合类 集合类存放于java.util包中。 集合类存放的都是对象的引用,而非对象本身,出于表达上的便利,我们称集合中的对象就是指集合中对象的引用(reference)。 集合类型主要有3种:set(集)、list(列表)和map(映射)。 http://www.backboneitgroup.cn

Java学习笔记十七——集合类详细总结各自对比-爱代码爱编程

Java编程基础倒数第三篇,感谢没有放弃的自己。 学习笔记参考书籍《Java编程基础》主编 张焕生。本书内容比较适合没有什么基础的入门小白,学完一章还有习题,比较适合初学者。 自律、积极、勤奋以及先从一个怎么样都不可能不会实现的小目标开始。 本文已收录于[ 专栏 ] 🌳《Java入门》系列🌳 前面[ 章节 ]

Java学习笔记十八——集合类之泛型-爱代码爱编程

学习笔记参考书籍《Java编程基础》主编 张焕生。本书内容比较适合没有什么基础的入门小白,学完一章还有习题,比较适合初学者。 自律、积极、勤奋以及先从一个怎么样都不可能不会实现的小目标开始。 本文已收录于[ 专栏 ] 🌳《Java入门》系列🌳 前面[ 章节 ]: 🎉🎉 Java学习笔记十七——集合类详

Java学习12.16——集合-爱代码爱编程

集合 集合类用于存储一组对象,其中的每个对象称之为元素。 集合类存放的都是对象的引用,而非对象本身,集合中不能存取基本数据类型。 Java中集合类主要有4种类型: set(集),list(列表),queue(列表),map(映射) Arraylist 大小可变,自动增长。可以动态的增加或减小元素 实现了Icodletion和list接口 它

pthread-爱代码爱编程

问题描述: 从业务抽离出来大概是这样:大概是如下的场景,这个程序跑了40分钟后,pthread_create返回11,创建失败。 int i=0; void play_handle(){     i=0;     for(;i<5;i++){         sleep(1);         printf("i=%d\n",i);    

java学习笔记——集合_java集合笔记-爱代码爱编程

目录 一、集合框架 二、Collection (一)List (二)Queue (三)Set 三、Map (一)HashMap (二)WeakHashMap (三)TreeMap (四)Hashtable (五)IdentityHashMap (六)EnumMap 一、集合框架 Java 集合框架主要包括两种类型的容器:

java——集合_java 不保存重复数据集合-爱代码爱编程

集合的特点 集合是Java中存储对象数据的一种容器 集合的大小不固定,启动后可以动态变化,类型也可以选择不固定。集合更像气球 集合非常适合做元素的增删操作 注意:集合中只能存储引用类型的数据,如果要存储基本类型的数据可以选择包装类 集合框架核心接口 ——Java集合的接口和具体实现是分离的 ——Java的集合框架中有两个基本的集合接口,一个

biginteger 和bigdecimal-爱代码爱编程

出处:为什么会想到大数呢?是因为最近在写leetcode刷题的时候钻牛角尖非要实现数组加1的问题导致的。(leetcode 66 加1问题)不过ps自己对大数还是用的少了,导致害怕用,然后leetcode用了还报错。(