您好,欢迎访问一九零五行业门户网

java中集合的区别是什么?

java中集合的区别是什么?
在java中集合主要分为:list,set,map三种,其中list与set是继承自collection,而map不是。
list与set的区别:list中的元素有存放顺序,并且可以存放重复元素,检索效率高,插入删除效率低,set没有存放顺序,而且不可以存放重复元素,后来的元素会把前面重复的元素替换掉,检索效率低,插入删除效率高。(set存储位置是由它的hashcode码决定的,所以它存储的对象必须有equals()方法,而且set遍历只能用迭代,因为它没有下标。)
1、最常用的集合:arraylist
特点:arraylist集合中元素存储的位置是连续的,所以查询起来会比较快捷,但是执行插入删除操作会比较麻烦一点,会引起其他元素位置的变化。
注意:list中存储的是对象的引用,而不是对象本身。如果不清楚这一点会在这里有个坑,例如:
有人为了节省优化代码,节省虚拟机内存会这么写代码:
list<list<string>> list=new arraylist<>();list<string> list2=new arraylist<>();for(int i=0;i<10;i++){ list2.add(""+i); list.add(list2); list2.clear();}
这样写虽然可以一个对象重复使用,但是,list存储的是对象的引用,当list2.clear();的时候,list中的list2也会clear,这样最后得到的就只能是一堆空的集合了。
2、与最常用集合相反的集合:linkedlist
linkedlist与arraylist是互补的,所以arraylist的优点就是linkedlist的缺点,arraylist的缺点就是linkedlist的优点。
特点:linkedlist中元素位置是任意的,所以执行插入删除操作效率较高,查询效率较低。
3、与一般集合都相反的集合:vector
为什么说它与一般集合都相反呢?因为它是一种老的动态数组,很多方法都用synchonized修饰,所以它是线程安全得,而一般集合是线程不安全得。
特点:多个线程同时访问不会发生不确定的结果,但是它的效率会比较低,如果要考虑线程安全的话可以用它。
4、set中最常用的集合:hashset
在用set集合的时候我几乎用的都是hashset,hashset是使用hash表实现的,集合里面的元素是无序得,可以有null值,但是不能有重复元素。
特点:因为相同的元素具有相同的hashcode,所以不能有重复元素
5、set中第二常用的集合:treeset
treeset是用二叉树结构实现的集合
特点:集合中的元素是有顺序得,不允许放入null,同样不能放入重复元素。
6、第二常用的集合:hashmap
经常遇到需要使用键值对存储的场景,而hashmap是用得最多的一种键值对存储的集合。
特点:hashmap允许空键值,并且它是非线程安全的,所以插入、删除和定位元素会比较快。
7、一些不太常用的map集合:treemap,hashtable
treemap是基于红黑树实现的,适用于按自然顺序火兹定于顺序遍历key。
hashtable是基于hashcode实现的,但它是线程安全的,所以会比hashmap效率低,而且不允许null值。
推荐教程:java教程
以上就是java中集合的区别是什么?的详细内容。
其它类似信息

推荐信息