您好,登錄后才能下訂單哦!
Collection接口是List/Set/Queue接口的父接口,其中定義的常用的操作方法有(注意此處筆記不完整,演示代碼沒有導包):
(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); }
}
}
案例: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<T> 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<l.size();x++) { String s=(String)l.get(x); System.out.println(s); }
}
}
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);
}
}
}
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);
}
}
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。