zoukankan      html  css  js  c++  java
  • Java 学习笔记 两大集合框架Map和Collection

    两大框架图解




    Collection接口

    由第一张图,我们可以知道,Collection接口的子接口有三种,分别是List接口,Set接口和Queue接口

    List接口

    允许有重复的元素,元素按照添加的顺序进行排序

    1. 接口方法

      • void add(int index,Objext o) 在集合的指定位置插入元素
      • Object get(int index) 返回集合中某个指定位置的元素
      • int indexOf(Object o) 返回第一次出现该元素的索引(下标),如果不包含此元素,返回-1
      • int lastIndexOf(Object o) 返回最后一次出现该元素的索引(下标),如果不包含此元素,返回-1
      • Object remove(int index) 移除集合某个索引的元素
      • Object set(int index,Object o) 用指定的元素替换集合中某个指定下标的数据元素
    2. 接口实现类的使用

      • ArrayList
        新增方法:
        addFirst
        getFirst
        removeFirst
        addLast
        getLast
        removeLast

        特点:在存储方式上是采用数组进行顺序存储

          List list = new ArrayList();
          List<泛型> list = new ArrayList<>();
        
      • LinkedList

        特点:在存储方式上是采用链表进行链式存储

          LinkedList<> list = new LinkedList<>();
        

    PS:由于ArrayList是采用数组进行存储的,所以添加元素或者是删除元素时,需要批量移动元素,所以性能较差。但查询元素的时候,可以通过下标直接进行访问,所以遍历元素或随机访问元素的时候效率高。
    而LinkedList与ArrayList相反

    list迭代

    如果想在list的迭代中操作list中的元素,例如删除,添加,使用listiterator,listiterator有add,set,remove

    List<Book> books = new ArrayList<>();
    //添加数据
    for (int i = 1; i < 10; i++) {
    	Book book = new Book();
    	book.setBno("00" + i);
    	books.add(book);
    }
    System.out.println(books.size());
    //通过ListIterator在遍历删除数据
    ListIterator<Book> bookListIterator = books.listIterator();
    String bno = "002";
    while (bookListIterator.hasNext()) {
    	Book next = bookListIterator.next();
    	if (next.getBno().equals(bno)) {
    		bookListIterator.remove();
    		break;
    	}
    }
    //输出结果测试
    System.out.println("-----");
    System.out.println(books.size());
    for (Book book : books) {
    	System.out.println(book.toString());
    }
    

    Set接口

    不允许有重复的元素,元素没有顺序

    1. 接口方法

      add clear contains remove
      和之前的List差不多,这里就不多说

    2. 接口实现类的使用

      • HashSet
        下面的图片很明显,体现了没有重复元素的规则

          **一般使用的话还是使用泛型使用**
          
          	Set<Book> books = new HashSet<>();
        
      • TreeSet
        由之前介绍的第四张图可以看到,TreeSet既继承了Set接口,也继承了SortedSet接口(排序接口)

        没有使用泛型,默认使用的是String类型,String类实现了Comparable接口,默认是按字典排序,但是图中明显没有实现排序?不理解。。

        我使用英文开头,才能实现排序

      • Set集合遍历

      //Iterator
      			Iterator iterator = set.iterator();
      			while (iterator.hasNext()){
      				System.out.println(iterator.next());
      			}
      			//foreach
      			for (String s:set) {
      				System.out.println(s);
      			}
      

    Queue接口

    较少使用。。

    Map接口

    使用键值对(key value)进行数据存储,key与value是一种映射关系
    
    1. 接口方法

      • Object put(Object key,Object value) 将一个键值对存到Map中
      • Object get(Object key) 由key获得value
      • Object remove(Object key) 删除该键值对
      • Set keyset() 返回当前包含当前map的所有key的Set集合
      • Collection values() 返回当前包含当前map的所有value的Collection集合
      • boolean containsKey(Object key) 是否包含某个key
      • boolean containsValue(Object Value) 是否包含某个Value
      • int size() 返回当前map集合键值对的个数
    2. 接口实现类的使用

      • HashMap的使用

        Map<String,String> map = new HashMap<>();
        Map<Integer,String> map = new HashMap<>();

      PS: 一般在开头声明键值对的类型,如果在后面声明的话,很大可能会报错

      • TreeMap的使用

        Map<String,String> map = new TreeMap<>();

      与之前的TreeSet一样,TreeMap也是实现了SortedMap借口,带有排序,默认是按照key的数值自然排序(也就是升序)

  • 相关阅读:
    promise的终止调用方法:
    (五)浅谈测试用例
    (四)一个bug的生命周期
    (三)趣谈软件需求分析
    (二)软件测试分类
    (一) 软件测试实质
    【转载—“光荣之路”公众号】Bug预防体系(上千bug分析后总结的最佳实践)
    <MFC>FILE的操作
    <CAN>测试的原理
    <C++>消息循环
  • 原文地址:https://www.cnblogs.com/stars-one/p/10155368.html
Copyright © 2011-2022 走看看