zoukankan      html  css  js  c++  java
  • Java集合 List,Set,Map

     

    一、List:、有顺序以线性方式存储,可以存放重复对象

    线程安全方法:List list = Collections.synchronizedList(new LinkedList(...));

    LinkedList:双向链表实现存储  索引数据慢插入数度较快  线程不安全(比安全性能好)

    ArrayList:数组方式存储数据  索引数据快插入数据慢  线程不安全

    Vector:数组方式存储数据  索引数据快插入数据慢  线程安全

    Stack:继承自Vector,实现一个后进先出的堆栈

    二、Set:无顺序,不包含重复的元素

    HashSet:为快速查找设计的Set。存入HashSet的对象必须定义hashCode()。  

    TreeSet: 保存次序的Set, 底层为树结构。使用它可以从Set中提取有序的序列。  

    LinkedHashSet:具有HashSet的查询速度,且内部使用链表维护元素的顺序(插入的次序)。于是在使用迭代器遍历Set时,结果会按元素插入的次序显示。

    三、Map:键必须是唯一

    同步方法:Map m = Collections.synchronizedMap(new TreeMap(...));

    Hashtable:基于散列表的实现  允许空键空值  线程安全

    HashMap:基于散列表的实现  允许空键空值  线程不安全  (与Hashtable基本一致)

    TreeMap: 基于红黑树数据结构的实现  不允许空键空值  线程不安全

    WeakHashMap:改进的HashMap,它对key实行“弱引用”,如果一个key不再被外部所引用,那么该key可以被GC回收。

    在除需要排序时使用TreeSet,TreeMap外,都应使用HashSet,HashMap,因为他们的效率更高。

    1) Collection
    一组"对立"的元素,通常这些元素都服从某种规则
       1.1) List必须保持元素特定的顺序
       1.2) Set不能有重复元素
       1.3) Queue保持一个队列(先进先出)的顺序
    2) Map
    一组成对的"键值对"对象

     Set集合类应用场景:

    1) HashSet的性能总是比TreeSet好(特别是最常用的添加、查询元素等操作),因为TreeSet需要额外的红黑树算法来维护集合元素的次序。只有当需要一个保持排序的Set时,才应该使用TreeSet,否则都应该使用HashSet
    2) 对于普通的插入、删除操作,LinkedHashSet比HashSet要略慢一点,这是由维护链表所带来的开销造成的。不过,因为有了链表的存在,遍历LinkedHashSet会更快
    3) EnumSet是所有Set实现类中性能最好的,但它只能保存同一个枚举类的枚举值作为集合元素
    4) HashSet、TreeSet、EnumSet都是"线程不安全"的,通常可以通过Collections工具类的synchronizedSortedSet方法来"包装"该Set集合。
    SortedSet s = Collections.synchronizedSortedSet(new TreeSet(...));

    List集合类应用场景:

    1. java提供的List就是一个"线性表接口",ArrayList(基于数组的线性表)、LinkedList(基于链的线性表)是线性表的两种典型实现
    2. Queue代表了队列,Deque代表了双端队列(既可以作为队列使用、也可以作为栈使用)
    3. 因为数组以一块连续内存来保存所有的数组元素,所以数组在随机访问时性能最好。所以的内部以数组作为底层实现的集合在随机访问时性能最好。
    4. 内部以链表作为底层实现的集合在执行插入、删除操作时有很好的性能
    5. 进行迭代操作时,以链表作为底层实现的集合比以数组作为底层实现的集合性能好

    =======================================================================================================================================

    Collection迭代:

    import java.util.Collection;
    import java.util.HashSet;
    import java.util.Iterator;
    
    public class Main {
    
        public static void main(String[] args) {
            Collection books = new HashSet();
            books.add("11");
            books.add("22");
            books.add("33");
    
    
            //获取books集合对应的迭代器
            Iterator it = books.iterator();
            while(it.hasNext())
            {
                //it.next()方法返回的数据类型是Object类型,
                //需要强制类型转换
                String book = (String)it.next();
                System.out.println(book);
                if (book.equals("11"))
                {
                    //从集合中删除上一次next方法返回的元素
                    it.remove();
                }
                //对book变量赋值,不会改变集合元素本身
                book = "测试字符串";
            }
            System.out.println(books);
        }
    }
    11
    22
    33
    [22, 33]
    View Code

    List的迭代:

    import java.util.ArrayList;
    import java.util.List;
    import java.util.ListIterator;
    
    public class Main {
    
        public static void main(String[] args) {
            String[] books = {
                    "11",
                    "22"
            };
            List bookList = new ArrayList();
            for (int i = 0; i < books.length ; i++ )
            {
                bookList.add(books[i]);
            }
            ListIterator lit = bookList.listIterator();
            while (lit.hasNext())
            {
                System.out.println(lit.next());
                lit.add("-------分隔符-------");
            }
            System.out.println("=======下面开始反向迭代=======");
            while(lit.hasPrevious())
            {
                System.out.println(lit.previous());
            }
        }
    }
    11
    22
    =======下面开始反向迭代=======
    -------分隔符-------
    22
    -------分隔符-------
    11
    View Code

    http://www.cnblogs.com/LittleHann/p/3690187.html

    http://blog.csdn.net/speedme/article/details/22398395

  • 相关阅读:
    hdu2588-GCD-(欧拉函数+分解因子)
    欧拉定理及其扩展定理公式
    hdu2973-YAPTCHA-(欧拉筛+威尔逊定理+前缀和)
    hdu5391-Zball in Tina Town-威尔逊定理(假证明)
    deleted
    deleted
    deleted
    deleted
    deleted
    deleted
  • 原文地址:https://www.cnblogs.com/hongdada/p/6046787.html
Copyright © 2011-2022 走看看