集合泛型

Posted test1234

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了集合泛型相关的知识,希望对你有一定的参考价值。

Collection  接口  用父类引用指向子类对象

  List(存取有序,有索引,可以重复)

    ArrayList底层是数组实现的,线程不安全,查找和修改快,增和删比较慢

    LinkedList底层是链表实现的,线程不安全,增和删比较快,查找和修改比较慢

    Vector底层是数组实现的,线程安全的,无论增删改查都慢

      如果查找和修改多,用ArrayList

      如果增和删多,用LinkedList

      如果都多,用ArrayList

  Set(存取无序,无索引,不可以重复)

    HashSet 底层是哈希算法实现。线程不安全,存取速度快。

      LinkedHashSet 底层是链表实现,但是也是可以保证元素唯一,和HashSet原理一样

    TreeSet 底层是二叉树算法实现 一般在开发的时候不需要对存储的元素排序,所以在开发的时候大多用HashSet,HashSet的效率比较高

      TreeSet在面试的时候比较多,问你有几种排序方式,和几种排序方式的区别

  Map

    HashMap底层是哈希算法,针对键线程不安全,存取速度快。可以最多一个为空

      LinkedHashMap底层是链表,针对键

    TreeMap底层是二叉树算法,针对键。默认根据键排序

    Hashtable它不允许记录的键或者值为空;它支持线程的同步,即任一时刻只有一个线程能写Hashtable,因此也导致了Hashtale在写入时会比较慢

附:map 遍历的四种方法:
public static void main(String[] args) {
  Map<String, String> map = new HashMap<String, String>();
  map.put("1", "value1");
  map.put("2", "value2");
  map.put("3", "value3");
  //第一种:普遍使用,二次取值
  System.out.println("通过Map.keySet遍历key和value:");
  for (String key : map.keySet()) {
   System.out.println("key= "+ key + " and value= " + map.get(key));
  }
  
  //第二种
  System.out.println("通过Map.entrySet使用iterator遍历key和value:");
  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());
  }
  //第三种:推荐,尤其是容量大时
  System.out.println("通过Map.entrySet遍历key和value");
  for (Map.Entry<String, String> entry : map.entrySet()) {
   System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());
  }
  //第四种
  System.out.println("通过Map.values()遍历所有的value,但不能遍历key");
  for (String v : map.values()) {
   System.out.println("value= " + v);
  }
}

 

以上是关于集合泛型的主要内容,如果未能解决你的问题,请参考以下文章

201621123062《java程序设计》第九周作业总结

201621123037 《Java程序设计》第9周学习总结

第九次作业

学习笔记Java基础知识——泛型与集合

C#中的泛型和泛型集合

操作 Java 泛型:泛型在继承方面体现与通配符使用