溫馨提示×

溫馨提示×

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

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

Java中List、Set、Map區別

發布時間:2020-07-13 20:41:09 來源:網絡 閱讀:1375 作者:沙漏半杯 欄目:編程語言

三者異同

List,Set都是繼承自Collection接口;


List特點:元素有放入順序,元素可重復;?

Set特點:元素無放入順序,元素不可重復(注意:元素雖然無放入順序,但是元素在set中的位置是有該元素的HashCode決定的,其位置其實是固定的);?

Map特點:元素按鍵值對存儲,無放入順序 (應該知道什么是鍵值對吧!) ;


List接口有三個實現類:LinkedList,ArrayList,Vector;?

LinkedList:底層基于鏈表實現,鏈表內存是散亂的,每一個元素存儲本身內存地址的同時還存儲下一個元素的地址。鏈表增刪快,查找慢;?

ArrayList和Vector的區別:ArrayList是非線程安全的,效率高;Vector是基于線程安全的,效率低;?

Set接口有兩個實現類:HashSet(底層由HashMap實現),LinkedHashSet;?

SortedSet接口有一個實現類:TreeSet(底層由平衡二叉樹實現)?

Query接口有一個實現類:LinkList?

Map接口有三個實現類:HashMap,HashTable,LinkeHashMap?

HashMap非線程安全,高效,支持null;HashTable線程安全,低效,不支持null?

SortedMap有一個實現類:TreeMap?

其實最主要的是,list是用來處理序列的,而set是用來處理集的。Map是知道的,存儲的是鍵值對?

set 一般無序不重復.map kv 結構 list 有序


Map相當于和Collection一個級別的;Map

去重的問題

package yn;


import java.util.ArrayList;

import java.util.HashSet;

import java.util.List;

import java.util.Set;


/**

?* 類描述:set集合針對String類型和8大基礎數據類型過濾掉重復數據,如果存放的是其他類型對象,

?* 則需要重寫hashCode方法和equals方法,當equals比較相等時,

?* 則會去比較hashCode值 hashCode的值 如果一致的話,則不會存進set

?* @author yxx

?*/

public class ListSetMap {??


? ? public static void main(String[] args) {??

? ? ? ? Set<String> nameSet = new HashSet<String>();??

? ? ? ? nameSet.add("張三");??

? ? ? ? nameSet.add("李四");??

? ? ? ? nameSet.add("王五");??

? ? ? ? nameSet.add("張三");??


? ? ? ? // 輸出結果 張三? 李四? 王五??

? ? ? ? for(String name : nameSet){??

? ? ? ? ? ? System.out.print(name + "\t");??

? ? ? ? }??

? ? ? ? System.out.println();


? ? ? ? // List集合去除重復基礎數據??

? ? ? ? List<String> nameList = new ArrayList<String>();??

? ? ? ? nameList.add("張三");??

? ? ? ? nameList.add("李四");??

? ? ? ? nameList.add("王五");??

? ? ? ? nameList.add("趙六");??

? ? ? ? nameSet.addAll(nameList);??


? ? ? ? // 輸出結果 張三? 李四? 王五? 趙六??

? ? ? ? for(String name : nameSet){??

? ? ? ? ? ? System.out.print(name + "\n");??

? ? ? ? }??


? ? ? ? // 去除編號和用戶名一樣的 對象,需要重寫 equals 方法 和 hashCode方法??

? ? ? ? User admin = new User(1, "admin");??

? ? ? ? User user = new User(2, "user");??

? ? ? ? User user1 = new User(2, "user");??

? ? ? ? User admin1 = new User(3, "admin");??



? ? ? ? Set<User> userSet = new HashSet<User>();??

? ? ? ? userSet.add(admin);??

? ? ? ? userSet.add(user);??

? ? ? ? userSet.add(admin1);??

? ? ? ? userSet.add(user1);??

? ? ? ? // 輸入結果 admin1? admin3? user2??

? ? ? ? for(User u : userSet){??

? ? ? ? ? ? System.out.print(u.username + u.id + "\t");??

? ? ? ? }??


? ? ? ? System.out.println(user.equals(null));??

? ? }??

}??


class User{??


? ? protected Integer id;??


? ? protected String username;??


? ? public User(Integer id, String username){??

? ? ? ? this.id = id;??

? ? ? ? this.username = username;??

? ? }??



? ? /**?

? ? ?* 如果對象類型是User 的話 則返回true 去比較hashCode值?

? ? ?*/??

? ? @Override??

? ? public boolean equals(Object obj) {??

? ? ? ? if(obj == null) return false;??

? ? ? ? if(this == obj) return true;??

? ? ? ? if(obj instanceof User){? ?

? ? ? ? ? ? User user =(User)obj;??

//? ? ? ? ? if(user.id = this.id) return true; // 只比較id??

? ? ? ? ? ? // 比較id和username 一致時才返回true 之后再去比較 hashCode??

? ? ? ? ? ? if(user.id == this.id && user.username.equals(this.username)) return true;??

? ? ? ? ? ? }??

? ? ? ? return false;??

? ? }??




? ? /**?

? ? ?* 重寫hashcode 方法,返回的hashCode 不一樣才認定為不同的對象?

? ? ?*/??

? ? @Override??

? ? public int hashCode() {??

//? ? ? return id.hashCode(); // 只比較id,id一樣就不添加進集合??

? ? ? ? return id.hashCode() * username.hashCode();??

? ? }??



}??


運行截圖

Java中List、Set、Map區別


這樣一來基本就明白了重寫equal是干什么的,也知道了set集合針對String類型和8大基礎數據類型過濾掉重復數據,如果存放的是其他類型對象,則需要重寫hashCode方法和equals方法,當equals比較相等時,則會去比較hashCode值 hashCode的值 如果一致的話,則不會存進set


向AI問一下細節

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

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女