zoukankan      html  css  js  c++  java
  • java基础(13)---集合框架

    一、集合框架

    Java的集合类是一些非常实用的工具类,主要用于存储和装载数据 (包括对象),因此,Java的集合类也被成为容器。在Java中,所有的集合类都位于java.util包下,这些集合类主要是基于两个根接口派生而来,它们就是 Collection和 Map

    Collection接口:

    Collection派生出三个子接口,

    Set代表不可重复的无序集合、

    List代表可重复的有序集合、

    Queue是java提供的队列实现,

    通过它们不断的扩展出很多的集合类,例如Vector、ArrayList、LinkedList、Deque等,其分布图如下:

    Map接口

    Map接口是和Collection同等级的根接口,它表示一个键值对(key-value)的映射,每一个key对应一个value,查找Map中的数据,总是根据key来获取,所以key是不可重复的,它用于标识集合里的每项数据。跟Collection一样,Map接口派生了很多的集合子类,这是Map的体系架构图:

    二、collection

    https://www.cnblogs.com/IT-LFP/p/10965611.html

    Vector、ArrayList、LinkedList这3者都是实现集合框架的List,也就是所谓的有序集合,因此具体功能也比较近似,比如都可以按照位置进行定位、添加或者删除的操作,都提供迭代器遍历其内容。但因为具体的设计区别,在行为、性能、线程安全等方面。表现又有很大不同。

    1、List

    List 是一个接口,不能实例化,需要一个具体类来实现实例化。List 集合中的对象按照一定的顺序排放,里面的内容可以重复。 List 接口实现的类有:ArrayList(实现动态数组),Vector(实现动态数组),LinkedList(实现链表),Stack(实现堆栈)。

    1、ArrayList

    ArrayList是应用更加广泛的动态数组实现,它本身不是线程安全的,所以性能要好很多。与Vector近似,ArrayList也是可以根据需要调整容量,不过两者的调整逻辑有区别,Vector在扩容时会提高一倍,而ArrayList会增加50% .

    2、vector

    Vector是Java早期提供的线程安全的动态数组,如果不需要线程安全,并不建议选择,毕竟同步是有额外开销的。Vector内部是使用对象数组来保存数据,可以根据需要来自动的增加容量,当数组已满时,会创建新的数组,并copy原有数据。

     3、 LinkedList

    是Java提供的双向链表。它不需要象上面两种那样调整容量,它也不是线程安全的。

    arraylist、vector和linkedlist比较:

    Vector和ArrayList作为动态数组,其内部元素以数组形式顺序存储,所以非常适合随机访问的场合。除了尾部插入和删除元素,往往性能会较差,比如我们在中间位置插入一个元素,需要移动后面所有元素。

    LinkedList进行节点插入删除要高效很多,但是随机访问性能则要比动态数组慢。

    三、Map

    1、HashMap

    1、导包

    import java.util.Map;

    import java.util.HashMap;

    2、方法:

    put(Object key,Object value) // 添加
    putAll(Collection c) // 添加
    get(Object key) //根据键来获取对应的值
    containsKey(Object key) // 是否包含key
    containsValue(Object value) // 是否包含value
    remove(Object key)  //删除key
    values() //获取所有的values
    isEmpty() //判断Map是否为空
    entrySet() //
    keySet()  //获取所有的key,返回的是Set

    举例:

    //创建HashMap
    HashMap<String,String> hm1 = new HashMap<String,String>();
    HashMap<String,String> hm2 = new HashMap<String,String>();
    
    String [] key = {"name","age","tender"};
    String [] value = {"zhangsan","16","men"};
    
    //添加元素
    //hm2
    hm2.put("id","012");
    hm2.put("describe", "zhangdelaohaokanle");
    
    //hm1一个一个添加
    for(int i = 0;i<3;i++){
        hm1.put(key[i], value[i]);
    }
    //hm1直接全添加
    hm1.putAll(hm2);
    
    //根据key获取值
    String name = hm1.get("name");
    
    //hm1是否包含value, key
    boolean flag = hm1.containsValue("013");
    boolean flag = hm1.containsKey("age");
    
    //hm1删除并返回
    String des = hm1.remove("describe")
    
    //获取所有的values
    Collection<String> li = hm1.values();
    
    //获取所有的keys
    Set<String> set = hm1.keySet();

    3、遍历:

    package test;
    import java.util.HashMap;
    import java.util.Iterator;  
    import java.util.ArrayList;
    import java.util.Collection;
    import java.util.Map.Entry;
    import java.util.Set;
    public class test6 {
     
        public static void main(String[] args) {
            HashMap<String,Integer> map =new HashMap<>();
            map.put("a", 1);
            map.put("b", 2);
            map.put("c", 3);
            map.put("d", 4);
             
    //       Map map=new HashMap();               
    //         map.put("a", "aaa");   
    //         map.put("b", "bbb");   
    //         map.put("c", "ccc");   
    //         map.put("d", "ddd");   
             
            //hashMap遍历方法1
             Iterator<String> iterator = map.keySet().iterator();               
             while (iterator.hasNext()) {   
              Object key = iterator.next();   
              System.out.println("map.get(key) is :"+map.get(key));   
             }
              
             //遍历方法2
             Set<Map.Entry<String, Integer>> set=map.entrySet();
             Iterator<Map.Entry<String, Integer>> it=set.iterator();
             while(it.hasNext()){
              //System.out.println(list.get(0) ); 
                 Map.Entry<String, Integer> e=it.next();
              System.out.println(e.getKey()+":"+e.getValue()); 
             }
              
              System.out.println(map.containsValue(1) ); 
              System.out.println(map.containsKey("a") ); 
              System.out.println(map.size() );
              System.out.println(map.remove("a") ); 
              System.out.println(map.size() ); 
              System.out.println(map.containsKey("a") ); 
              System.out.println(map.containsValue(1) ); 
               
              //ArrayList <Integer> list =(ArrayList<Integer>)map.values();     
              //上面会出现异常,因为map.values()返回的是一个Collection<Integer>对象,可用下面的方法解决
              ArrayList <Integer> list =new ArrayList<Integer>(map.values());   
              Iterator <Integer>ite=list.iterator();
              while(ite.hasNext()){
                  //System.out.println(list.get(0) ); 
                  System.out.println(ite.next() ); 
              }
              map.clear();
              System.out.println(map.isEmpty() ); 
               
        }
     
    }

    length、length()和size区别:

    • length

    length是针对各种数组的属性,比如int[], char[], byte[], string[];

    • length()

    length()是针对String的方法,一般用于 if(s == null || s.lenght() == 0){return ;}

    • size()

    size()是针对集合类的方法, 一般用于 Set( HashSet,TreeSet), List(ArrayList, LinkedList), Map(HashMap, SortedMap..等) 这些集合类获取集合元素的数量。

    https://blog.csdn.net/i000zheng/article/details/78850165

    https://www.cnblogs.com/zz22--/p/10753284.html

    https://blog.csdn.net/weixin_41434306/article/details/88582800

  • 相关阅读:
    nginx和phpfpm保持长连接
    单件模式+打开窗体+窗体构造函数参数
    Java REST框架一览(转)
    什么原因成就了一位优秀的程序员?(转)
    使用 sqlRest 将数据库转换为 REST 风格的 Web 服务(转)
    浏览器插件之ActiveX开发系列(转载)
    Java JSON技术框架选型与实例(转)
    SQL参数绑定
    ab压力测试工具使用
    Jintegra使用注意事项
  • 原文地址:https://www.cnblogs.com/Lee-yl/p/11633104.html
Copyright © 2011-2022 走看看