日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Arraylist、HashSet去重复 treeSet排列实现方法 HashMap遍历取值

發布時間:2025/3/20 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Arraylist、HashSet去重复 treeSet排列实现方法 HashMap遍历取值 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

java提供的Arraylist本身不能對添加的元素進行去重,需要在添加后進行比較,如果相同就不添加

public?static?ArrayList?single(ArrayList?al)?{ArrayList?temp?=?new?ArrayList();Iterator?it?=?al.iterator();while(it.hasNext()){Object?obj?=?it.next();if(!temp.contains(obj)){??//如果元素已經存在就不添加?確保不重復temp.add(obj);}}return?temp;}

java里Hashset默認可以自動對字符型等簡單對象進行去重復,如

public?static?void?main(String[]?args)?{HashSet?hs?=?new?HashSet();hs.add("hehe");hs.add("xixii");hs.add("hehe");Iterator?it?=?hs.iterator();while(it.hasNext()){System.out.println(it.next());}}

HashSet判斷是否重復時,先判斷HashCode是否一樣兩個對象hashcode不相等,他們一定不equals。兩個對象hashcode相等,他們不一定equals,還需要進一步判斷。重寫equals方法,步驟

1. ?判斷傳入的對象是否為空,如果為空,沒有比較的必要 返回false

2. ?判斷當前對象是否和傳入對象是同一個對象,如果是一個對象,沒有必要比較,返回true

3. ?判斷當前對象是否和傳入的對象類型相同,如果不同,沒有比較的意義 返回false

4. 如果當前對象和傳入對象類型相同(傳入對象可以是相同或者子類),將傳入的對象強制轉換為當前對象類型

5. 逐個的來比較對象中的每一個屬性值(對象的比較用equals()方法,基本類型用==,double,float 有精度損失的,可以將其轉換成對應的Double,Float后在調用equals()進行比較)

public?class?Person?{private?String?name;private?int?age;public?Person(String?name,?int?age)?{super();this.name?=?name;this.age?=?age;}@Overridepublic?int?hashCode()?{ return?name.hashCode()+age*27;??//不同對象產生不同的hashcode?不會調用equals提高效率}@Override public?boolean?equals(Object?obj)?{if(this?==?obj)???//判斷是否為同一個對象?是返回?true?證明已經存在return?true;if(!(obj?instanceof?Person))??//不是同一對象?判斷是否?隸屬于?person類對象throw?new?ClassCastException("類型錯誤");?//不是拋出異常Person?p?=?(Person)obj;??//轉換為?Person類型return?this.name.equals(p.name)?&&?this.age?==?p.age;?//返回?是否存在} }

排序有兩種實現方式:comparable和Comparator

第一種 comparable 排序

TreeSet排序 ?實現comparable接口 只有TreeSet可以排序 HashSet不可以,所有的set都可以去重復

public?class?Person?implements?Comparable<Person>?{................public?int?compareTo(Person?p){int?temp?=?this.age?-?p.age;??//按年齡排序return?temp==0?this.name.compareTo(p.name):temp;???//年齡相同按姓名排序}}

例子

public?static?void?main(String[]?args)?{TreeSet?ts?=?new?TreeSet();??//TreeSet對象ts.add(new?Person("zhangsan",28));ts.add(new?Person("lisi",21));ts.add(new?Person("wangu",24));ts.add(new?Person("zangu",24));Iterator?it?=?ts.iterator(); while(it.hasNext()){Person?p?=?(Person)it.next();System.out.println(p.getName()+":"+p.getAge());}} 先按年齡?相同年齡?再按姓名。 結果:lisi?21wanggu?24zangu??24zhangsan?28

第2種 comparator排序

public?class?ComparatorByName?implements?Comparator?{@Overridepublic?int?compare(Object?o1,?Object?o2)?{Person?p1?=?(Person)o1;Person?p2?=?(Person)o2;int?temp?=?p1.getName().compareTo(p2.getName());??//先按姓名 return?temp==0?p1.getAge()-p2.getAge():?temp;?????//再按年齡排} }public?static?void?main(String[]?args)?{TreeSet?ts?=?new?TreeSet(new?ComparatorByName()); ts.add(new?Person("zhangsan",28));ts.add(new?Person("lisi",21));ts.add(new?Person("zangu",24));ts.add(new?Person("zangu",26));Iterator?it?=?ts.iterator();while(it.hasNext()){Person?p?=?(Person)it.next(); System.out.println(p.getName()+":"+p.getAge());} } 結果:lisi?21zangu?24zangu?26zhangsan?28

map鍵值對 ?遍歷值的獲取 ?

entrySet可以直接獲取 key和value?keySet() 先獲得key 然后通過get(key)獲得value值

public?static?void?method(Map<Integer,String>?map){Map<Integer,String>?map?=?new?HashMap<Integer,String>(); map.put(8,"zhaoliu");map.put(2,"zhaoliu");map.put(7,"xiaoqiang");map.put(6,"wangcai");Collection<String>?values?=?map.values();??//獲得value值Iterator<String>?it2?=?values.iterator();while(it2.hasNext()){System.out.println(it2.next());}Set<Map.Entry<Integer,?String>>?entrySet?=?map.entrySet();??//Iterator<Map.Entry<Integer,?String>>?it?=?entrySet.iterator();while(it.hasNext()){Map.Entry<Integer,?String>?me?=?it.next();Integer?key?=?me.getKey();????????//獲得keyString?value?=?me.getValue();?????//獲得valueSystem.out.println(key+"::::"+value); }Set<Integer>?keySet?=?map.keySet();Iterator<Integer>?it?=?keySet.iterator();while(it.hasNext()){Integer?key?=?it.next();String?value?=?map.get(key);System.out.println(key+":"+value); } }

HashMap 每個key 只有一個value 最后一次key的value會重新以前的value。

keySet實現HashMap遍歷?

public?static?void?main(String[]?args)?{HashMap<Student,String>?hm?=?new?HashMap<Student,String>();hm.put(new?Student("lisi",38),"北京");hm.put(new?Student("zhaoliu",24),"上海");hm.put(new?Student("zhaoliu",24),"鐵嶺");Iterator<Student>?it?=?hm.keySet().iterator();while(it.hasNext()){Student?key?=?it.next();??????//先得到keyString?value?=?hm.get(key);???//根據key獲得valueSystem.out.println(key.getName()+":"+key.getAge()+"---"+value);} }

輸出結果 lisi 38 北京

????????????zhaoliu 24 鐵嶺 ? //替換了前面的 上海的那個

TreeMap也可以實現排列?Comparator,方式與TreeSet一樣,這里就不介紹了



轉載于:https://my.oschina.net/u/274829/blog/313405

總結

以上是生活随笔為你收集整理的Arraylist、HashSet去重复 treeSet排列实现方法 HashMap遍历取值的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。