• Java集合类的使用


    集合框架有何好处

    集合弥补了数组的缺陷,他比数组更灵活更实用,可大大提高软件的开发效率,而且不同的集合可使用与不同场合

    数组和集合的区别

    1. 数组长度固定,集合长度可以动态改变
    2. 定义数组时必须指定元素类型,集合默认所有元素都是Object
    3. 无法直接获取数组中实际元素的个数,集合可以通过size()直接获取元素个数
    4. 集合有多种实现方式和不同的适合场合,而不像数组仅采用分配连续空间方式。
    5. 集合以接口,类的形式存在,具有面向对象的三大特征,提高了软件的开发效率

    Hashtable和HashMap的异同

    实现原理、功能相同,可以互用
    主要区别

    • Hashtable继承Dictionary类,HashMap实现Map接口
    • Hashtable线程安全,HashMap线程非安全
    • Hashtable不允许null值,HashMap允许null值

    泛型集合的好处

    • 严格限制存入元素的数据类型,从集合中取出元素时无需进行强制类型转换,避免了ClassCastException异常。

    Collections算法类

    1. Collections和Collection不同,前者是集合的操作类,后者是集合接口
    2. Collections提供的常用静态方法
    3. sort():排序
    4. binarySearch():查找
    5. max()min():查找最大最小值

    集合类有哪些

    • Collection(接口)(由List和Set两部分组成)

    • List(接口)

      • LinkedList(类)
      • ArrayList(类)
      • Vector(类)
      • stack(类)
    • Set接口

    • Map接口

      • Hashtable(类)
      • HashMap(类)
      • WeakHashMap(类)

    如何使用集合类

    1. 如果涉及到堆栈、队列等操作,应当考虑List,对于需要快速插入,删除元素,应该使用LinkedList,如果需要快速随机访问元素,应该使用ArrayList
    2. 哈希表的操作,作为Key的对象要正确复写equals和hashCode方法
    3. 尽量返回接口而非实际的类型,如返回List而非ArrayList,这样如果将来要将ArrayList换成LinkedList时,客户端代码不用改变
    4. List可以有类似数组的下标操作,且允许有相同的元素存在;Map是以键值对(KeyValue)的形式存在,不能存在相同的键

    常用集合类

    1. ArrayList类:
      ArrayList实现可变大小的数组,长度随着元素的增加而变化,而且可以存在重复的元素
    2. HashMap类:
      允许null,即null key,null value。且存在的形式是key-value形式,不允许有key重复

    Collection的使用

    Collection接口是什么

    • Collection接口是可以理解成动态的数组、集合,和数组类似,但不同的是集合可以任意扩充大小
    • Collection是最基本的接口,Java SDK提供的类都是继承自Collection的子接口,例如“List”、“Set”

    Collection接口特点

    • 性能高
    • 易扩展
    • 易修改

    List接口的使用

    List接口的特点

    • List接口可以存放任意的数据,且在接口中,内容可以重复
    • List中提供了高效的插入和移除多个元素的方法

    List常用(实现)子类

    • ArrayList(实现类)
      例:List list = new ArrayList<>();
    • Vector(实现类)
      例:List list = new Vector<>();

    ArrayList和Vector区别

    |ArrayList Vector
    推出时间 JDK1.2后
    性能 异步处理,性能高
    线程安全 非线程安全

    Set的使用

    Set接口的特点

    Set接口可以存放任意的数据,且在接口中,数据不可以重复(注意和List进行区别)

    Set接口常用子类

    • HashSet
      Set sets = new HashSet<>();
    • TreeSet
      Set sets = new TreeSet<>();

    HashSet和TreeSet的区别

    • HashSet与TreeSet都是间接实现了Set接口,同样拥有add、remove等方法
    • HashSet是无序存放的、而TreeSet实现是有序存放(ASCII顺序存放)

    Map的使用

    Map的特点

    • Map接口存放数据是以键值对的形式存放,例如:

      key -> value
      "name" -> "尼古拉斯赵四"
      "age" -> "33"

    • 键(key)的类型要一致,值(value)的类型也要一致。

    Map常用实现类(实现类的方法和List、Set的方法不一样)

    • HashMap

      Map<String,String> maps = new HashMap<>();
      maps.put("name","詹姆斯刘能");
      maps.put("age","24");

    List接口常用方法

    • boolean add(Object o) 在列表的末尾顺序添加元素,起始索引位置从0开始
    • void add(int index,Object o) 在指定的索引位置添加元素。索引位置必须介于0和列表中元素个数之间
    • int size()返回列表中的元素个数
    • Object get(int index)返回指定索引位置处的元素。取出的元素是Object类型,使用前需要进行强制类型转换
    • boolean contains(Object o) 判断列表中是否存在指定元素
    • boolean remove(Object o) 从列表中删除元素
    • Object remove(int index) 从列表中删除指定位置元素,起始索引位置从0开始

    LinkedList常用方法

    • void addFirst(Object o) 在列表的首部添加元素
    • void addLast(Object o) 在列表的末尾添加元素
    • Object getFirst() 返回列表中的第一个元素
    • Object getLast() 返回列表中的最后一个元素
    • Object removeFirst() 删除并返回列表中的第一个元素
    • Object removeLast() 删除并返回列表中的最后一个元素

    Map接口常用方法

    • Object put(Object key, Object val) 以“键-值”对的方式进行存储
    • Object get(Object key) 根据键返回相关联的值,如果不存在指定的键,返回null
    • Object remove(Object key) 删除由指定的键映射的“键-值对”
    • int size() 返回元素个数
    • Set keySet() 返回键的集合
    • Collection values() 返回值的集合
    • boolean containsKey(Object key) 如果存在由指定的键映射的“键-值对”,返回true

    迭代器iterator的使用(接口)

    • iterator自带常用方法

      • hasNext:如果仍有元素可以迭代,则返回true

      • next:返回迭代下一个元素

      • remove:从迭代器指向的collection中移除迭代器返回的最后一个元素(可选操作)

        Set sets = maps.keySet();
        Iterator iterator = sets.iterator();
        while(iterator.hasNext()){
        System.out.println("key=" + iterator.next());
        }

      Collection collection = maps.values();
      Iterator iterator = collection.iterator();
      while(iterator.hasNext()){
      System.out.println("value=" + iterator.next());
      }

    结尾

  • 相关阅读:
    Webservice里使用Linq遇到ToList输出泛型而产生循环引用错误的解决办法(转)
    JavaScript 面向对象程序设计(转)
    SilverLight中的基本图形(转)
    JQuery常用方法一览(转)
    常用的JS(转)
    简单的java socket 服务器端
    Eclipse RCP 之国际化(转载)
    使用Eclipse构建GeoTools项目
    java.lang.UnsatisfiedLinkError: no XX in java.library.path解决方法
    sqlite第三方类库:FMDB使用(转载)
  • 原文地址:https://www.cnblogs.com/skylinelin/p/9407811.html
Copyright © 2020-2023  润新知