前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java集合框架

Java集合框架

作者头像
翎野君
发布2023-05-12 15:50:58
3070
发布2023-05-12 15:50:58
举报
文章被收录于专栏:翎野君

Collection是集合接口     |————Set子接口:无序,不允许重复。     |————List子接口:有序,可以有重复元素。

    区别:Collections是集合类

    Set和List对比:     Set:检索元素效率低下,删除和插入效率高,插入和删除不会引起元素位置改变。     List:和数组类似,List可以动态增长,查找元素效率高,插入删除元素效率低,因为会引起其他元素位置改变。

    Set和List具体子类:     Set      |————HashSet:以哈希表的形式存放元素,插入删除速度很快。

    List      |————ArrayList:动态数组      |————LinkedList:链表、队列、堆栈。

    Array和java.util.Vector     Vector是一种老的动态数组,是线程同步的,效率很低,一般不赞成使用。

Collection是集合接口

Collections是集合类

Set接口继承自Collection集合接口

List接口继承自Collection集合接口

Set接口:是Collection接口的一个子接口,它表示数学意义上的集合概念。Set中不包含重复的元素,即Set中不存两个这样的元素e1和e2,使得e1.equals(e2)为true。

1、TreeSet 是二差树实现的,Treeset中的数据是自动排好序的,不允许放入null值。 

2、HashSet 是哈希表实现的,HashSet中的数据是无序的,可以放入null,但只能放入一个null,两者中的值都不能重复,就如数据库中唯一约束。 

3、HashSet要求放入的对象必须实现HashCode()方法,放入的对象,是以hashcode码作为标识的,而具有相同内容的 String对象,hashcode是一样,所以放入的内容不能重复。但是同一个类的对象可以放入不同的实例 。

代码语言:javascript
复制
package cn.czbk.no7;

import java.util.HashSet;
import java.util.Set;
import java.util.TreeSet;

public class CollectionTest {

public static void main(String[] args) {
HashSet hs=new HashSet();
hs.add("abc");
hs.add("abc");
hs.add("ab");
hs.add("ac");
hs.add("ab");
hs.add("ac");
hs.add("abcd");
System.out.println(hs);//
//定义一个接口类型的引用变量来引用实现接口的类的实例
Set treeSet=new TreeSet(hs);
System.out.println(treeSet);

}
}

上述代码执行完毕后的控制台打印出来的数据如下:

List接口:继承了 Collection 接口以定义一个允许重复项的有序集合。该接口不但能够对列表的一部分进行处理,还添加了面向位置的操作。

ArrayList和LinkedList的大致区别如下: 1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。  2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。  3.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。 

代码语言:javascript
复制
package cn.czbk.no7;

import java.util.ArrayList;
import java.util.List;

public class ListTest {
public static void main(String[] args) {
List l1=new ArrayList();
for(int i=0;i<=9;i++)
{
l1.add("ly"+i);
}
System.out.println("初始化: \n"+l1);
l1.add(4, "ly04");
System.out.println("在下标为4的地方新增里ly04: \n"+l1);
l1.set(8, "ly08");
System.out.println("将下标为8的值改为ly08: \n"+l1);
l1.remove(1);
System.out.println("删除下标为1的值: \n"+l1);
}
}
代码语言:javascript
复制
package cn.czbk.no7;

import java.util.Collections;
import java.util.LinkedList;
import java.util.List;

public class TestList1 {
public static void main(String[] args) {
List l1=new LinkedList();
for(int i=0;i<=9;i++){
l1.add("a"+i);
}
System.out.println("初始化\n"+l1);
Collections.shuffle(l1);
System.out.println("乱序之后\n"+l1);
Collections.reverse(l1);    
System.out.println("逆序\n"+l1);
Collections.sort(l1);
System.out.println("排序"+l1);
}
}

Map接口:不是 Collection 接口的继承。而是从自己的用于维护键-值关联的接口层次结构入手。按定义,该接口描述了从不重复的键到值的映射。

HashMap和Hashtable的区别

导读:

1 HashMap不是线程安全的

            HashMap是map接口的子类,是将键映射到值的对象,其中键和值都是对象,并且不能包含重复键,但可以包含重复值。HashMap允许null key和null value,而hashtable不允许。

2   HashTable是线程安全。

HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable。

HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。 HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因为contains方法容易让人引起误解。 Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现。 最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步。 Hashtable和HashMap采用的hash/rehash算法都大概一样,所以性能不会有很大的差

总结:

hashmap

线程不安全

允许有null的键和值

效率高一点、

方法不是Synchronize的要提供外同步

有containsvalue和containsKey方法

HashMap 是Java1.2 引进的Map interface 的一个实现

HashMap是Hashtable的轻量级实现

hashtable

线程安全

不允许有null的键和值

效率稍低、

方法是是Synchronize的

有contains方法方法

、Hashtable 继承于Dictionary 类

Hashtable 比HashMap 要旧

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-07-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档