zoukankan      html  css  js  c++  java
  • JAVA 中的集合框架

    java集合框架提供了一套性能优良、使用方便的接口和类,它们位于java.util包中

    一、集合与数组

    数组:(可以存储基本数据类型)是用来存现对象的一种容器,但是数组的长度固定,不适合在对象数量未知的情况下使用。(在别的博客转载   https://www.cnblogs.com/leeplogs/p/5891861.html)

    集合:(只能存储对象,对象类型可以不一样)的长度可变,可在多数情况下使用。(在别的博客转载  https://www.cnblogs.com/leeplogs/p/5891861.html)

      

    collection      接口存储一组不唯一,无序的对象
    list       接口存储一组不唯一,有序(插入顺序)的对象
    set            接口存储一组唯一,无序的对象

    ArrayList: 实现长度可变的数组,在内存中分配连续的空间.遍历元素和随机访问元素的效率比较高

    LinkedList: 采用链表存储方式.插入删除元素时效率比较高

     Vector ArrayLis 的 异同
      实现原理、功能相同、可以互用
    主要区别
      vector线程安全,ArrayList 重速度轻安全线程非安全
      长度需增长时,vector默认增长一倍ArrayList增长50%

    HshtableHashMap的异同

    实现原理、功能相同、可以互用
    主要区别
    Hashtable  继承 Dictionary 类 HashMap 实现Map接口
    Hashtable  线程安全,Hashmap线程非安全
    Hashmao  不允许有null值,Hashtable允许null值

    在实际开发中最好使用ArrayList 和Hashmap

    Collections 相当于一个工具类里面提供了排序等等一系列方法  java.util.Collections包下

     1 package TEXT;
     2 
     3 import java.util.ArrayList;
     4 import java.util.Collections;
     5 import java.util.Random;
     6 
     7 public class Text {
     8     // 排序
     9     public static void Stringlist() {
    10         ArrayList<Integer> stringlist = new ArrayList<>();
    11         Random random = new Random();
    12         int li;
    13         for (int i = 0; i < 10; i++) {
    14             do {
    15                 li = random.nextInt(10);
    16             } while (stringlist.contains(li));
    17             stringlist.add(li);
    18             System.out.println("成功添加" + li);
    19         }
    20         System.out.println("
    "
    21                 + "====================排序前=======================" + "
    ");
    22         for (int i = 0; i < stringlist.size(); i++) {
    23             System.out.println(stringlist.get(i));
    24         }
    25         System.out.println("
    "
    26                 + "====================排序后=======================" + "
    ");
    27         Collections.sort(stringlist);
    28         for (Integer integer : stringlist) {
    29             System.out.println(integer);
    30         }
    31     }
    32 
    33     /**
    34      * @param args
    35      */
    36     public static void main(String[] args) {
    37         {
    38             {
    39                 Text.Stringlist();
    40             }
    41         }
    42     }
    43 }

    下面的几种集合中比较常用的方法

    Map coutries=new HashMap();
    添加 put(Object key键名,Object value值)
    coutries.put("","");
    通过key获得值
    String conter=(String)coutries.get("填写key值");
    显示集合中的个数
    coutries.size();
    判断是否存在键名 (返回一个bool值)
    Boolean bool=coutries.containsKeys("键名")
    判断是否存在值 (返回一个bool值)
    Boolean bool=coutries.containsValue("值")
    删除集合对象
    coutries.remove("键名");
    键集
    coutries.keySet();
    值集
    coutries.values();

    清空coutries集合

    coutries.clear();

     迭代器只用于单列集合 双列集合要想使用迭代器 先把双列集合装换成单例集合

    package day03map;
    import java.util.Collection;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.Map;
    import java.util.Map.Entry;
    import java.util.Set;
    /** 2018年3月10日 */
    public class Day01 {
     public static void main(String[] args) {
      Map<String, String> map = new HashMap<String, String>();
      map.put("CBC", "中国建设银行");
      map.put("ABC", "中国农业银行");
      map.put("ICBC", "中国工商银行");
      // 双列的集合遍历方式 不能使用for 下标 因为他没有下标
      // 方式一:for : 通过keys集合遍历value
      Set<String> set = map.keySet();
      for (String key : set) {
       System.out.println(key);
       // key有了,Value如何获取?
       System.out.println(map.get(key));
      }
      System.out.println("=======================");
      // 方式二:直接遍历value
      Collection<String> collection = map.values();
      for (String value : collection) {
       System.out.println(value);
      }
      System.out.println("==========================");
      // 方式三:key和Value
      Set<Entry<String, String>> entrySet = map.entrySet();
      for (Entry<String, String> entry : entrySet) {
       System.out.println(entry.getKey());
       System.out.println(entry.getValue());
      }
      // 方案四:使用迭代器遍历
      System.out.println("===========================");
      Set<String> keySet = map.keySet();
      Iterator<String> iterator = keySet.iterator();
      // 迭代器需要手工迭代 ,需要使用while
      while (iterator.hasNext()) {
       String key = iterator.next();
       System.out.println(key);
       System.out.println(map.get(key));
      }
      System.out.println("最后的晚餐=============");
      // 方案五:使用迭代器遍历 key+value同时遍历
      Iterator<Entry<String, String>> iterator2 = map.entrySet().iterator();
      // 见到Iterator就得使用while循环
      while (iterator2.hasNext()) {
       Entry<String, String> entry = iterator2.next();
       System.out.println(entry.getKey());
       System.out.println(entry.getValue());
      }
     }
    }

     Set类继承了Conllection类,是一种集合类。Set的实现类有三个

    HashSet类按照哈希算法来存取集合中的对象,存取速度比较快。

    1.Set中是不能出现重复数据的。

    2.Set中可以出现空数据。

    3.Set中的数据是无序的。

    LinkedHashSet

    这个相对于HashSet来说有一个很大的不一样是LinkedHashSet是有序的。LinkedHashSet在迭代访问Set中的全部元素时,性能比HashSet好,但是插入时性能稍微逊色于HashSet。

    TreeSet的特点是:

    1.不能写入空数据  2.写入的数据是有序的。  3.不写入重复数据

    总结一下集合

    定义一个单例集合 默认初始化10个位置,但元素个数为0;

    ArrayList 的扩容原理是(乘3/2)+1 也就是 原容量的 0.5倍+1

    Vector 的扩容原理是原来的一倍

    HashMap:默认初始容量为16 的扩容原理是原来的一倍

    HashSet :初始容量也是16 它的扩容也是原来的一倍

  • 相关阅读:
    3.消息队列和事件循环
    2.V8工作原理
    1.浏览器中的Javascript执行机制
    入前端之门半年的感想
    前端面试相关知识点整理记录
    Nginx报错——upstream timed out 10060
    浅谈偏向锁、轻量级锁、重量级锁
    Debug 的一点思路
    Shiro 之 HashedCredentialsMatcher 认证匹配
    计算机网络基础 之六:应用层
  • 原文地址:https://www.cnblogs.com/wh1520577322/p/8761211.html
Copyright © 2011-2022 走看看