zoukankan      html  css  js  c++  java
  • java核心卷轴之集合

    1. Iterator

      1.1 注意事项

        接口的remove方法将删除上次调用next方式时返回的对象,即:remove之前,必须有next(先获取,再删除)。

      1.2 例一:删除字符串集合中的第一个元素 

    Iterator<String> it = c.iterator();//c是一个集合类的实例
    it.next();
    it.remove();

      1.3 例二:删除两个连续的元素

    Iterator<String> it = c.iterator();//c是一个集合类的实例
    it.next();
    it.remove(); //删除第一个元素
    it.next();
    it.remove();//删除第二个元素

    2. 类的层次结构设计模式步骤

      2.1 Interface(提供所有需要的方法名称)

      2.2 AbstractClass(实现通用的方法,其他方法使用抽象方法)

      2.3 Class(实现抽象方法)

    3.  Java类库中的具体集合

    接口

    集合类型

    描述

    Collection

    ArrayList

    一种可以动态增长和缩减的索引序列

    LinkedList

    一种可以高效插入和删除的有序序列

    ArrayDeque

    一种用循环数组实现的双端队列

    HashSet

    一种无重复元素的无序集合

    EnumSet

    一种包含枚举类型值的集合

    LinkedHashSet

    一种无重复元素的有序(插入顺序)集合

    PriorityQueue

    一种允许高效删除最小元素的集合

    Map

    HashMap

    一种存储键值对的映射表

    TreeMap

    一种存储有序键值对的映射表

    EnumMap

    一种键值属于枚举类型的映射表

    LinkedHashMap

    一种存储键值对的有序(插入顺序)映射表

    WeakHashMap

    一种值不被使用后可以被垃圾回收器回收的映射表

    IdentityHahMap

    一种用==而不是用equals比较键值的映射表

    4. 链表

      在Java中,所有链表实际上都是双向链接的(即:双向链表)。

    5. 在集合的固定位置添加元素

      5.1 在指定元素后面添加新的元素

    List<String> list = new ArrayList<String>();
    list.add("Tom");
    list.add("Jack");
    list.add("Mike");
    // ListIterator里面有add()方法在某个位置添加元素
    ListIterator<String> it =  list.listIterator();
    while(it.hasNext()){
        //在jack的后面添加元素
        if(it.next().equals("Jack")){
            it.add("Joe");        
        }
    }
    for (String string : list) {
        System.out.println(string);
    }

    6. Vector类和ArrayList类

      6.1 Vector类:线程同步,可以由两个线程安全地访问一个Vector对象;(建议多线程时使用)

      6.2 ArrayList类:线程不同步,在单线程情况下,使用效率高。(建议单线程时使用)

    7. TreeSet

      7.1 TreeSet排序原理

        TreeSet排序是用树结构完成的(当前实现使用的是红黑树)

      7.2 TreeSetHashSet的比较

        将一个元素添加到TreeSet中要比添加到HashSet中慢,但是TreeSet可以对元素自动排序(按字母顺序排序)。

    8. PriorityQueue(优先级队列)

      8.1 含义

        以任意的顺序插入数据,无论何时调用remove()方法,总会获取当前队列(已实现自动排序)中的最小元素。

      8.2 用途

               使用优先级队列的典型示例是任务调度。每一个任务都有一个优先级,每次启动一个新的任务时,都会从队列中移除优先级最高的任务(通常设置1的优先级最高)。

      8.3 示例

    PriorityQueue<Integer> queue = new PriorityQueue<Integer>();
    queue.add(3);
    queue.add(5);
    queue.add(2);
    queue.add(1);
    while(!queue.isEmpty()){
        System.out.println(queue.remove()); //1 2 3 5     
    }

    9. Map

      9.1 Map的put()方法返回用这个键参数存储的上一个值

      9.2 示例

    Map<String, String> map = new HashMap<String, String>();
    String s = map.put("Hello", "Hello");
    String ss = map.put("Hello", "hello");
    System.out.println(s);//null
    System.out.println(ss);//Hello

    10. 视图对象

      10.1 含义

        视图对象是指有限制的集合对象。

      10.2 示例

        list1就是一个试图对象,带有访问底层数组的get/set方法,但是不能改变原有数组的    长度(例如:与迭代器相关的add和remove方法),否则会抛出异常java.lang.UnsupportedOperationException

    Integer[] nums = new Integer[]{1,2,3,4,5};
    List<Integer> list1 = Arrays.asList(nums);
    list1.add(8);//Exception in thread "main" java.lang.UnsupportedOperationException

     

    11.  集合的排序方法

      11.0   附表(创建示例列表)

    List<String> strList = new ArrayList<String>();
    strList.add("a");
    strList.add("b");
    strList.add("c");

      11.1 升序排序

    Collections.sort(strList);

      11.2 降序排序

    Collections.sort(strList,Collections.reverseOrder());

      11.3 备注

        Collections是一个静态工具类,里面封装了很多集合的处理函数。

    12. 二分法查找(Collections.binarySearch()

       12.1 返回参数

        如果binarySearch返回的数字大于等于0,则返回的数值表示匹配对象的索引;若返回的是负值,则表示元素不存在。可以利用返回的负值将元素插入集合中的正确位置。

      12.2 示例

    List<String> list = new ArrayList<String>();
    list.add("1");
    list.add("3");
    list.add("5");
    list.add("7");
    list.add("9");
    int index = Collections.binarySearch(list, "4");//index : -3
    if(index < 0){
        list.add(-index-1, "4");
    }
    for (String string : list) {//1 3 4 5 7 9
        System.out.print(string);
        System.out.print(" ");
    }

      更多内容,请访问:http://www.cnblogs.com/BlueStarWei/

  • 相关阅读:
    Spring boot test
    SQL怎么输出前n个记录? n是中间计算得到的,不支持变量传递
    crontab 命令
    Python 素数判断;以及默尼森数
    精通Web Analytics 2.0 (1) 引言
    Python 编程小备忘
    Python 编辑器 tips
    Hadoop 权威指南学习1 (主要框架)
    ml的线性回归应用(python语言)
    python 学习5--matplotlib画图实践
  • 原文地址:https://www.cnblogs.com/BlueStarWei/p/7638982.html
Copyright © 2011-2022 走看看