中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java學習入門-05 -集合淺析

發布時間:2020-08-03 23:19:10 來源:網絡 閱讀:81 作者:daydaydream 欄目:編程語言

集合數據結構體系框架

Java學習入門-05 -集合淺析

Collection接口是List/Set/Queue接口的父接口,其中定義的常用的操作方法有(注意此處筆記不完整,演示代碼沒有導包):

  • 添加功能
    ?i. boolean add(object obj)添加一個元素
    ?ii. boolean addAll(Collection c)將集合c的全部元素添加到原集合元素后返回true
    ?iii. 添加功能永遠返回true
  • 刪除功能
    ?i. void clear();移除所有元素
    ?ii. boolean remove(Object o)移除一個元素
    ?iii. boolean removeAll(Collection c)移除一個集合的元素,只要有一個被移除就返回true,改變原集合,刪除原集合中和c中相同的元素
    ?iv. 刪除功能只有刪除成功后才返回true
  • 判斷功能
    ?i. boolean contain(object o)判斷集合中是否包含指定的元素。
    ?ii. boolean containsAll(Collection c)判斷原集合中是否包含指定集合c的所有元素,有則true,
    ?iii. boolean isEmpty()判斷集合是否為空
  • 獲取功能
    ?i. Iterator iterator()迭代器,集合的專用方式,實現遍歷的功能
    ?ii. Object next()獲取當前元素,并移動到下一個位置
    ?iii. boolean hasNext()判斷此位置是否有元素
    ?iv. 迭代器遍歷實例在下面
    f) 長度功能
    ?i. int size()元素的個數
    ?ii. 數組和字符串中都是length()方法獲取元素個數,集合中是size()方法
    ??因為object包括集合、字符串、數組,所以其不能直接用length方法。
  • 交集功能boolean retainAll(Collection c)
    ?兩個集合交集的元素給原集合,并判斷原集合是否改變,改變則true,不變則false
  • 把集合轉換為數組
    ?i. Object [] toArray()

1、Set代表元素無序、不可重復的集合

(1)HashSet是Set接口的典型實現,線程執行是非安全的,集合元素可以為null
(2)HashSet通過過兩個方法hashCode()和equals()保證元素的唯一性,方法自動生成。當存儲對象時則無法確保唯一性,可能需要重寫hashCode。
(3)TreeSet是Set接口實現
???+ 1. 底層數據是紅黑二叉樹
???+ 2. 排序方式:自然排序、比較器排序
???+ 3. 通過比較返回值是否為0來保證元素的唯一性。
例子:

//使用HashSet類隨機產生10個不重復的1到20的不重復隨機數
public class HashSetDemo {
public static void main(String[] args) {
Random r=new Random();

  HashSet <Integer> hs=new HashSet<Integer>();

  while(hs.size()<10) {
      hs.add((r.nextInt(20)+1));
  }
  for(Integer i:hs) {
      System.out.println(i);
  }

}

}

2、List代表元素有序、可以重復的集合

案例:main()方法中代碼

Collection<String> lists = new ArrayList<>();
lists.add("集合lists測試1");
lists.add("集合lists測試2");
lists.add("集合lists測試3");

    CollectionAll listall = new CollectionAll();
    listall.print(lists);

CollectionAll類如下:

package com.paint.test;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
public class CollectionAll<T> {

public void print(Collection&lt;T&gt; lists){
    for(T o:lists){
        System.out.println(o);
    }
}

}

利用集合的迭代器遍歷(優勢是不會輕易改變集合實參值)

public class InteratoeDemo {
public static void main(String[] args) {

  //Collection集合的遍歷
  Collection c=new ArrayList();
  c.add("java01");
  c.add("java02");
  c.add("java03");

  Iterator i=c.iterator();

  while(i.hasNext()) {
      //向下轉型
      String s=(String) i.next();
      System.out.println(s);
  }
  System.out.println("-----------------");
  //List集合的遍歷
  List l=new ArrayList();

  l.add(0,"測試01");
  l.add(1,"測試02");
  l.add(1,"java集合測試");

  ListIterator li=l.listIterator();

  //后向遍歷
  while(li.hasNext()) {
      String s=(String)li.next();
      System.out.println(s);
  }
  System.out.println("-----------------");

  //前向遍歷
  while(li.hasPrevious()) {
      String s=(String)li.previous();
      System.out.println(s);
  }
  System.out.println("-----------------");

  //get方法遍歷
  for(int x=0;x&lt;l.size();x++) {
      String s=(String)l.get(x);
      System.out.println(s);

  }

}
}

3、Queue隊列是一種特殊的線性表,它只允許在表的前端進行刪除操作,而在表的后端進行插入操作。LinkedList類實現了Queue接口。

public class Main {
public static void main(String[] args) {
//add()和remove()方法在失敗的時候會拋出異常(不推薦)
Queue<String> queue = new LinkedList<String>();
//添加元素
queue.offer("a");
queue.offer("b");
queue.offer("c");
queue.offer("d");
queue.offer("e");
for(String q : queue){
System.out.println(q);
}
System.out.println("===");
System.out.println("poll="+queue.poll()); //返回第一個元素,并在隊列中刪除
for(String q : queue){
System.out.println(q);
}
System.out.println("===");
System.out.println("element="+queue.element()); //返回第一個元素
for(String q : queue){
System.out.println(q);
}
System.out.println("===");
System.out.println("peek="+queue.peek()); //返回第一個元素
for(String q : queue){
System.out.println(q);
}
}
}

4、Map用于保存映射關系的數據

  • Map接口有三個比較重要的實現類,分別是HashMap、TreeMap和HashTable。
  • TreeMap是有序的,HashMap和HashTable是無序的。
  • Hashtable的方法是同步的,HashMap的方法不是同步的。這是兩者最主要的區別。

HashMap<K,V>:存儲數據采用的哈希表結構,元素的存取順序不能保證一致。由于要保證鍵的唯一、不重復,需要重寫鍵的hashCode()方法、equals()方法。

LinkedHashMap<K,V>:HashMap下有個子類LinkedHashMap,存儲數據采用的哈希表結構+鏈表結構。通過鏈表結構可以保證元素的存取順序一致;通過哈希表結構可以保證的鍵的唯一、不重復,需要重寫鍵的hashCode()方法、equals()方法。

注意:Map接口中的集合都有兩個泛型變量<K,V>,在使用時,要為兩個泛型變量賦予數據類型。兩個泛型變量<K,V>的數據類型可以相同,也可以不同。

例子:
按照鍵值遍歷

public class MapDemo {
public static void main(String[] args) {
//創建Map對象
Map<String, String> map = new HashMap<String,String>();
//給map中添加元素
map.put("a", "孫儷");
map.put("b", "范冰冰");
map.put("c", "柳巖");
//獲取Map中的所有key
Set<String> keySet = map.keySet();
//遍歷存放所有key的Set集合
Iterator<String> it =keySet.iterator();
while(it.hasNext()){ //利用了Iterator迭代器

//得到每一個key
String key = it.next();
//通過key獲取對應的value
String value = map.get(key);
System.out.println(key+"="+value);
}
}
}

按照鍵值對遍歷

public class MapDemo {
public static void main(String[] args) {
//創建Map對象
Map<String, String> map = new HashMap<String,String>();
//給map中添加元素
map.put("a", "孫儷");
map.put("b", "范冰冰");
map.put("c", "柳巖");
//獲取Map中的所有key與value的對應關系
Set<Map.Entry<String,String>> entrySet = map.entrySet();
//遍歷Set集合
Iterator<Map.Entry<String,String>> it =entrySet.iterator();
while(it.hasNext()){
//得到每一對對應關系
Map.Entry<String,String> entry = it.next();
//通過每一對對應關系獲取對應的key
String key = entry.getKey();
//通過每一對對應關系獲取對應的value
String value = entry.getValue();
System.out.println(key+"="+value);
}
}

Java學習入門-05 -集合淺析

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

驻马店市| 镇安县| 安丘市| 辽宁省| 福鼎市| 永安市| 富阳市| 唐山市| 长白| 潮州市| 松江区| 元阳县| 浮梁县| 谢通门县| 江西省| 桂平市| 晋宁县| 溆浦县| 乌恰县| 房产| 孝感市| 镇雄县| 博野县| 金湖县| 民县| 云梦县| 新干县| 抚州市| 辽阳市| 永年县| 凉山| 临沧市| 甘孜县| 安陆市| 汽车| 湄潭县| 大安市| 建平县| 积石山| 大渡口区| 五莲县|