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/

  • 相关阅读:
    笑话(真人真事)一则
    Object Builder中的Locator究竟是不是采用Composite的模式之我见
    C++AndC#我的程序员之路
    C#中各种十进制数的转换
    使用GotDotnet workSpace手记
    检索 COM 类工厂中 CLSID 为 {0002450000000000C000000000000046} 的组件失败
    CSS如何让同一行的图片和文字垂直居中对齐(FF,Safari,IE都通过)
    怎样练习一万小时成为顶级高手?
    CSS控制大小写
    做SEO权重计算公式
  • 原文地址:https://www.cnblogs.com/BlueStarWei/p/7638982.html
Copyright © 2011-2022 走看看