java hasset 順序_java集合排序問題

List: 元素是有序的,元素可以重復,因為該集合體系有索引(腳標)

常用的子類對象:

1————ArrayList 底層的數據結構是使用的數組結構特點:查詢速度快,但是增刪比較慢

2————LinkedList底層的數據結構使用的是鏈表結構特點:增刪速度快,但是查詢比較慢

Vector 底層是數組數據結構。

線程同步,ArrayList線程不同步,替代了vector ArrayList 是可變長度數組,默認長度是10,當添加的元素大于10時,系統自動new一個新的數組且增長原數組的一半長度,并把之前的元素復制到這個新數組中,vector和它一樣,但是延長一倍。

Set:無序,不可重復元素 HashSet:數據結構是哈希表,線程是非同步的。保證元素唯一性的原理,判斷元素的hashCode值是否相同如果相同,還會繼續判斷元素的equals方法,是否為true。

TreeSet:

可以對Set集合中的元素進行排序。底層數據結構是二叉樹。 保證元素唯一行的依據,compareTo方法return 0;

TreeSet 排序的第一種方式

讓元素(對象)自身具備比較性。元素需要實現Comparable接口,覆蓋 compareTo方法這種方式也稱為元素的自然順序,或者叫做默認順序

TreeSet第二種排序方式:

當元素自身不具備比較性時,或者具備的比較性不是所需要的,這時需要讓集合(TreeSet)自身具備比較性。做法是在集合初始化時,就有了比較方式,即定義一個比較器將比較器作為參數傳遞給TreeSet集合的構造函數。比較器--定義一個類,實現Comparator接口,覆蓋compare方法。而當兩種排序都存在時以比較器為主。

關于ArrayList添加對象,自定義判斷條件問題以及HashSet集合添加自定義對象問題雖然兩個集合的底層結構不同,但是他們都調用添加對象類中的equals方法,而 ArrayList是通過contains()方法讓系統自動調用equals方法;HashSet是通過當add添加元素的時候系統自動調用hashCode()方法判斷hash值如果相等則不會被添加,如果相等,再通過hashCode方法調用equals方法判斷。一般添加的時候都會在類中重寫hashCode 和equals以滿足實際條件的需求。但是,ArrayList和HashSet重寫Object類中的equals方法原理都是一樣的。

例如:

class Person {

private String name;

private int age;

Person(String name,int age) { this.name=name; this.age=age; }

public String getName() { return name; }

public int getAge() { return age; } }

此equals是重寫Object中的equals方法 obj形參實參是contains中的,相當于obj=new Person("xiaoxiao11",15);

多態 public boolean equals(Object obj) { 判斷傳進來的對象是否是Person對象不是的話就返回false if (!(obj instanceof Person)) { return false; } 因為傳參傳進來的對象是Object的子類對象,體現多態性,必須向下轉型 Person p=(Person)obj; return this.name.equals(p.name)&&this.age==p.age; 而return中的equlas是字符串中的equals方法~~! 比較字符串對象的內容是否相同 } }

關于TreeSet添加自定意對象,讓其排序的問題。有兩種方式

第一種讓元素(對象)自身具備比較性。元素需要實現Comparable接口,覆蓋 compareTo方法這種方式也稱為元素的自然順序,或者叫做默認順序

class Student implements Comparable {

private String name;

private int age;

Student(String name,int age) { this.name=name; this.age=age; }

當在TreSet中添加對象的時候底層自動調用Comparable接口中的compareTo方法

class Student implements Comparable {

private String name;

private int age;

Student(String name,int age) { this.name=name; this.age=age; }

public int compareTo(Student s) { System.out.println(this.name+"...compareto...."+s.name);

int num= new Integer(this.age).compareTo(new Integer (s.age));

if(num==0) return this.name.compareTo(s.name);//比較名字是否相同時次要條件

return num; }

public String getName() { return name; }

public int getAge() { return age; } }

第二種:當元素自身不具備比較性時,或者具備的比較性不是所需要的,這時需要讓集合(TreeSet)自身具備比較性。做法是在集合初始化時,就有了比較方式,即定義一個比較器將比較器作為參數傳遞給TreeSet集合的構造函數。比較器--定義一個類,實現Comparator接口,覆蓋compare方法。而當兩種排序都存在時以比較器為主使用了泛型--在集合初始化時把new Mycomparator()以構造方法傳參傳進去即可

class Mycomparator implements Comparator {

public int compare(String o1,String o2) { int num=new Integer(o1.length()).compareTo(new Integer (o2.length()));

if (num==0) { return o1.compareTo(o2); }

return num; } }

Map集合的兩種取出方式

Set keySet:將Map中所有的鍵存入到Set集合,因為Set集合具備迭代器所以可以迭代取出所有的鍵,在根據get(key)獲取值。 Map集合的取出原理:將Map集合轉成Set集合,再迭代取出。

Set> entrySet:將Map集合中的映射關系存入到Set集合中,而這個關系的數據類型就是:Map.Entry Map.Entry 其實Entry也是一個就扣,它是Map接口中的一個內部接口。

interface Map {

public static interface Entry {

//定義內部接口是因為取出Map中的成員屬性方便

public abstract Object getKey();

public abstract Object getValue(); } }

class HashMap implements Map {

//HashMap 取出元素的原理

class Haha implements Map.Entry {

public abstract Object getKey(){ }

public abstract Object getValue(){ } }

Map的子類

Hashtable:底層是哈希表數據結構,不可以存null鍵null值。線程同步

HashMap: 底層是哈希表數據結構,允許存null鍵null值,線程不同步

TreeMap: 底層是二叉樹數據結構,線程不同步,可以給Map中的鍵排序其實Set底層就是使用了Map集合

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/541922.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/541922.shtml
英文地址,請注明出處:http://en.pswp.cn/news/541922.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

如何使用JavaScript刪除CSS屬性?

In this article, well see how we can remove a CSS property from a certain element using JavaScript? We can remove only those properties that we assign ourselves and the pre-default ones cannot be removed by this method. 在本文中,我們將看到如何使…

Django 緩存系統

Django 是動態網站,一般來說需要實時地生成訪問的網頁,展示給訪問者,這樣,內容可以隨時變化,但是從數據庫讀多次把所需要的數據取出來,要比從內存或者硬盤等一次讀出來 付出的成本大很多。 緩存系統工作原理…

java web截屏_java_WebDriver中實現對特定的Web區域截圖方法,用過 WebDriver 的同學都知道,We - phpStudy...

WebDriver中實現對特定的Web區域截圖方法用過 WebDriver 的同學都知道,WebDriver 可以對瀏覽器中的頁面進行截圖。例如:public byte[] takeScreenshot() throws IOException {TakesScreenshot takesScreenshot (TakesScreenshot) driver;return takesSc…

c語言 關鍵字const_C ++ const關鍵字| 查找輸出程序| 套裝1

c語言 關鍵字constProgram 1: 程序1&#xff1a; #include <iostream>using namespace std;void fun(int& A) const{A 10;}int main(){int X 0;fun(X);cout << X;return 0;}Output: 輸出&#xff1a; [Error] non-member function void fun(int) cannot ha…

【喜報】JEEWX榮獲“2016 年度碼云新增熱門開源軟件排行榜”第一名!

為什么80%的碼農都做不了架構師&#xff1f;>>> 2016 年度碼云新增項目排行榜 TOP 50 正式出爐&#xff01;根據 2016 年在碼云上新增開源項目的 Watch、Star、Fork 數量以及其他角度的統計&#xff0c;JEEWX捷微管家榮獲“2016 年度碼云新增熱門開源軟件排行榜”第…

java 二叉樹特點_瘋狂java筆記之樹和二叉樹

樹的概述樹是一種非常常用的數據結構&#xff0c;樹與前面介紹的線性表&#xff0c;棧&#xff0c;隊列等線性結構不同&#xff0c;樹是一種非線性結構1.樹的定義和基本術語計算機世界里的樹&#xff0c;是從自然界中實際的樹抽象而來的&#xff0c;它指的是N個有父子關系的節點…

編輯距離 dp_使用動態編程(DP)編輯距離

編輯距離 dpProblem: You are given two strings s1 and s2 of length M and N respectively. You can perform following operations on the string. 問題&#xff1a;給您兩個長度分別為M和N的字符串s1和s2 。 您可以對字符串執行以下操作。 Insert a character at any posi…

tomcat +apache 配置集群

2019獨角獸企業重金招聘Python工程師標準>>> APACHE2.2.25TOMCAT6.0.37配置負載均衡 目標: 使用 apache 和 tomcat 配置一個可以應用的 web 網站&#xff0c;要達到以下要求&#xff1a; 1. Apache 做為 HttpServer &#xff0c;后面連接多個 tomcat 應用實例&…

java雙緩存機制_詳解JVM類加載機制及類緩存問題的處理方法

前言大家應該都知道&#xff0c;當一個Java項目啟動的時候&#xff0c;JVM會找到main方法&#xff0c;根據對象之間的調用來對class文件和所引用的jar包中的class文件進行加載(其步驟分為加載、驗證、準備、解析、初始化、使用和卸載)&#xff0c;方法區中開辟內存來存儲類的運…

oracle中dbms_并發和由于DBMS中的并發導致的問題

oracle中dbms并發 (Concurrency) The ability of a database system which handles simultaneously or a number of transactions by interleaving parts of the actions or the overlapping this is called concurrency of the system. 數據庫系統通過交織部分操作或重疊操作來…

什么是mvc?

什么是MVCMVC 是一種設計模式&#xff0c;它將應用劃分為3 個部分&#xff1a;數據&#xff08;模型&#xff09;、展現層&#xff08;視圖&#xff09;和用戶交互層&#xff08;控制器&#xff09;。換句話說&#xff0c;一個事件的發生是這樣的過程&#xff1a;1&#xff0e;…

mysql的安裝和基本命令_MySQL安裝以及簡單命令用法

MYSQL:關系型數據庫存儲引擎:負責將邏輯層的概念轉化為物理層機制&#xff0c;在物理層完成物理機制。支持事務&#xff1a;transaction必須滿足的條件&#xff1a;ACID(一致性,持久性,原子性,隔離性)鎖&#xff1a;并發訪問隨機訪問&#xff1a;數據在磁盤上是隨機存儲的安裝&…

將數組轉換為JavaScript中的對象

Lets say you have the following array, 假設您有以下數組&#xff0c; const nums [1, 2, 3, 4, 5];console.log(nums);Output 輸出量 (5) [1, 2, 3, 4, 5]We know that nums is an array and we can see in the output that we get an array. Lets convert it into an ob…

docker集群運行在calico網絡上

2019獨角獸企業重金招聘Python工程師標準>>> ##網絡及版本信息 docker1 centos7 192.168.75.200 docker2 centos7 192.168.75.201 物理網絡 192.168.75.1/24 Docker version 1.10.3, build 3999ccb-unsupported &#xff0c;安裝過程略 # calicoctl version Version…

python批量雷達圖_python批量制作雷達圖

老板要畫雷達圖&#xff0c;但是數據好多組怎么辦&#xff1f;不能一個一個點excel去畫吧&#xff0c;那么可以利用python進行批量制作&#xff0c;得到樣式如下&#xff1a;首先制作一個演示的excel&#xff0c;評分為excel隨機數生成&#xff1a;1 INT((RAND()4)*10)/10加入標…

JavaScript中帶有示例的Math.log()方法

JavaScript | Math.log()方法 (JavaScript | Math.log() Method) Math.log() is a function in math library of JavaScript that is used to return the value of natural Log i.e. (base e) of the given number. It is also known as ln(x) in mathematical terms. Math.log…

SUI踩坑記錄

SUI踩坑記錄 最近做了個項目選型了SUI和vue做單頁應用。下面記錄一下踩坑經歷SUI 介紹 sui文檔&#xff1a;http://m.sui.taobao.org/SUI Mobile 是一套基于 Framework7 開發的UI庫。它非常輕量、精美&#xff0c;只需要引入我們的CDN文件就可以使用&#xff0c;并且能兼容到 i…

java 寫入xml文件_java讀寫xml文件

要讀的xml文件李華姓名>14年齡>學生>張三姓名>16年齡>學生>學生花名冊>package xml;import java.io.FileOutputStream;import java.io.OutputStreamWriter;import java.io.Writer;import java.util.Iterator;import java.util.Vector;import javax.xml.pa…

JavaScript中帶有示例的Math.max()方法

JavaScript | Math.max()方法 (JavaScript | Math.max() Method) Math.max() is a function in math library of JavaScript that is used to return the greatest value of all the passed values to the method. Math.max()是JavaScript數學庫中的函數&#xff0c;用于將所有…

java 修飾符默認_Java和C#默認訪問修飾符

C#中&#xff1a;針對下面幾種類型內部成員的訪問修飾符&#xff1a;enum的默認訪問修飾符&#xff1a;public。class的默認為private。interface默認為public。struct默認為private。其中&#xff1a;public可以被任意存取&#xff1b;protected只可以被本類和其繼承子類存取&…