zoukankan      html  css  js  c++  java
  • 持有对象:总结JAVA中的常用容器和迭代器,随机数 速查

    JAVA使用术语“Collection”来指代那些表示集合的对象,JAVA提供的接口很多,首先我们先来记住他们的层次结构:

    java集合框架的基本接口/类层次结构
    
    java.util.Collection [I]
    +--java.util.List [I]
       +--java.util.ArrayList [C]
       +--java.util.LinkedList [C]
       +--java.util.Vector [C]
          +--java.util.Stack [C]
    +--java.util.Set [I]
       +--java.util.HashSet [C]
       +--java.util.SortedSet [I]
          +--java.util.TreeSet [C]
    
    java.util.Map [I]
    +--java.util.SortedMap [I]
       +--java.util.TreeMap [C]
    +--java.util.Hashtable [C]
    +--java.util.HashMap [C]
    +--java.util.LinkedHashMap [C]
    +--java.util.WeakHashMap [C]
    

    对于那些没有使用泛型的容器,这些容器里存储Object对象,也就是说可以是不同类型的对象。无论是否使用泛型,行为都是相同的,一般还是用泛型保证类型安全,避免运行时错误,注意泛型不能以基础类型为参数。

    一些静态方法:

    使用Arrays.asList(objects...)生成了一个列表用于初始化容器

    使用Collections.sort(list)来排序容器内的元素

    使用Collections.shufle(list, rand)来打乱元素顺序

    ArrayList

    使用add(object)和addAll(collection)和add(index, object)和add(index, collection)来添加元素,实际上所有Collection的实现类都有前三个方法

    使用remove(object)和remove(index)和removeAll(collection)和clear()来删除元素,注意remove(object)只删除一个匹配的元素,然而remove(list)会删除所有匹配的元素。

    使用set(index, object)替换一个元素。

    使用get(index)来向客户端返回一个元素。

    使用indexOf(object)来返回特定值的元素的索引

    使用contains(object)和containsAll(collection)来确定元素是否存在

    使用isEmpty()判断是否是空集

    使用用size()返回元素的个数。

    使用subList()进行切片,也就是返回原集合的片段。

    使用toArray()来返回一个数组,无泛型版本则返回Object对象的数组。一个数组实体实际上是一些引用的序列。

    使用retainAll(collection)来求交集,表示只保留同时存在于collection中的元素。

    tips:小心,方法add(list)和remove(list)指的是添加或删除这个列表中的元素,而不是列表本身!有时候会出现模棱两可的情况,也就是说编译器可以找到多个成员方法都可以匹配被调用的方法,特别是泛型的参数是Integer的时候。经过在eclipse里做实验,并不会出现错误,如下代码,编译器优先选择把2当作基础类型来用。

    List<Integer> lst = new ArrayList<Integer>();
    lst.add(1);
    lst.add(2);
    lst.add(3);
    lst.add(2,100);
    out.println(lst);
    lst.remove(new Integer(100));//这条语句可以被替换为 lst.remove(2),最后输出结果不变
    out.println(lst);

    Iterator

    使用next()向客户端返回迭代器的next指针当前指向的元素。

    使用hasNext()判断next指针是否还指向序列中的某个元素,也就是说迭代器的next指针当前是否指向END。

    使用remove()删除迭代器最近返回给客户端的那个元素。也就是说不能一开始就使用这个方法。

    使用set()来替换迭代器最近返回给客户端的那个元素,同样需要先用next()之后在使用本方法。

    tips:迭代器的作用是帮助程序员生成更加通用的代码。无论面对哪一种具体的容器,不需要关心容器是不是用顺序表来实现的,都可以用相同的方式来访问容器中的元素。

    ListIterator

    它只能用于对List类型的访问,可以双向移动,容器的工厂方法可以接受一个整数参数,指定初始索引。

    具有Iterator的所有方法。

    使用previous()向客户端返回迭代器的previous指针当前指向的元素。

    使用hasPrevious()判断previous指针否是指向序列中的某个元素,也就是说迭代器的previous指针是否指向BEFORE_BEGIN。(名字都是我自己起的,jdk源码并非如此,但是不影响理解)

    LinkedList

    具有大多数ArrayList的操作

    使用element()或getFirst()和peek()返回位于列表头的元素。

    使用remove()或removeFirst()和poll()删除位于列表头的元素。

    使用removeLast()删除位于列表尾部的元素。

    使用addFirst(object)在列表头添加元素

    使用add(object)或addLast(object)或offer(object)在列表末尾添加元素

    Map

    使用get(key)来寻找一个键对应的值,如果没找到返回null。

    使用keySet()来返回给进程所有的键值,组成集合

    使用remove(key)来删除某个键值对

    使用put(object,object)来添加键值对。

    tip:各种获取方法的区别

    values():
    方法是获取集合中的所有的值----没有键,没有对应关系,
    KeySet():
    将Map中所有的键存入到set集合中。因为set具备迭代器。所有可以迭代方式取出所有的键,再根据get方法。获取每一个键对应的值。 keySet():迭代后只能通过get()取key
    entrySet():
    Set<Map.Entry<K,V>> entrySet() //返回此映射中包含的映射关系的 Set 视图。 Map.Entry表示映射关系。entrySet():迭代后可以e.getKey(),e.getValue()取key和value。返回的是Entry接口 。

    //第一种:普遍使用,二次取值for (String key : map.keySet()) {
       System.out.println("key= "+ key + " and value= " + map.get(key));
      }
      
      //第二种
      Iterator<Map.Entry<String, String>> it = map.entrySet().iterator();
      while (it.hasNext()) {
       Map.Entry<String, String> entry = it.next();
       System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());
      }
      
      //第三种:推荐,尤其是容量大时for (Map.Entry<String, String> entry : map.entrySet()) {
       System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());
      }
    
      //第四种for (String v : map.values()) {
       System.out.println("value= " + v);
      }
     }

    随机数的生成:

    Randdom rand = new Random(47);
    int r = rand.nextInt(20);
  • 相关阅读:
    JVM 的主要组成部分及其作用
    一天一个 Linux 命令(5):pwd命令
    算法-经典趣题-马踏棋盘(又称骑士周游)
    SAP HANA Schemas 和 HDI Containers
    如何手动下载并安装 Visual Studio Code 的 SAP Fiori tools
    一个最简单的 Github workflow 例子
    SAP UI5 初学者教程之七
    最近看的动漫和电影
    关于工作,干了这碗鸡汤
    啊啊啊啊啊啊
  • 原文地址:https://www.cnblogs.com/xinchrome/p/4856659.html
Copyright © 2011-2022 走看看