zoukankan      html  css  js  c++  java
  • Java集合框架

    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是一样,所以放入的内容不能重复。但是同一个类的对象可以放入不同的实例 。

    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要移动数据。 

    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("初始化: 
    "+l1);
    l1.add(4, "ly04");
    System.out.println("在下标为4的地方新增里ly04: 
    "+l1);
    l1.set(8, "ly08");
    System.out.println("将下标为8的值改为ly08: 
    "+l1);
    l1.remove(1);
    System.out.println("删除下标为1的值: 
    "+l1);
    }
    }

     

    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("初始化
    "+l1);
    Collections.shuffle(l1);
    System.out.println("乱序之后
    "+l1);
    Collections.reverse(l1);    
    System.out.println("逆序
    "+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 要旧

  • 相关阅读:
    shell脚本修改Linux系统中所有IP样例
    关闭并卸载数据库脚本
    查询编译不通过的存储过程并重新编译
    SQL函数造数据样例(一)
    类型转换和多态
    Java学习笔记(三)
    Java学习笔记二()
    Java学习笔记(一)
    1.2.零宽断言
    1.3.匹配小括号的字符(可能有小括号在一行的,也有多行的)
  • 原文地址:https://www.cnblogs.com/lingyejun/p/7103488.html
Copyright © 2011-2022 走看看