當前位置:首頁 » 編程語言 » javatreeset

javatreeset

發布時間: 2022-04-21 04:04:33

java集合treeset 怎麼輸出集合元素

來個測試

publicstaticvoidmain(String[]args){
TreeSet<String>set=newTreeSet<String>();
set.add("feilong");
set.add("long");
set.add("fei");
set.add("feifei");

for(Stringstring:set){
System.out.println(string);
}
}


輸出:

fei
feifei
feilong
long

❷ Java HashSet和TreeSet的區別

==========================他們的區別===========================
1.HashSet是通過HashMap實現的,TreeSet是通過TreeMap實現的,只不過Set用的只是Map的key
2.Map的key和Set都有一個共同的特性就是集合的唯一性.TreeMap更是多了一個排序的功能.
3.hashCode和equal()是HashMap用的,因為無需排序所以只需要關註定位和唯一性即可.
a.hashCode是用來計算hash值的,hash值是用來確定hash表索引的.
b.hash表中的一個索引處存放的是一張鏈表,所以還要通過equal方法循環比較鏈上的每一個對象
才可以真正定位到鍵值對應的Entry.
c.put時,如果hash表中沒定位到,就在鏈表前加一個Entry,如果定位到了,則更換Entry中的value,並返回舊value
4.由於TreeMap需要排序,所以需要一個Comparator為鍵值進行大小比較.當然也是用Comparator定位的.
a.Comparator可以在創建TreeMap時指定
b.如果創建時沒有確定,那麼就會使用key.compareTo()方法,這就要求key必須實現Comparable介面.
c.TreeMap是使用Tree數據結構實現的,所以使用compare介面就可以完成定位了.

=====================================他們的用法======================

HashSet的使用
importjava.util.HashSet;
importjava.util.Iterator;
publicclassWpsklHashSet
{
//java中Set的使用(不允許有重復的對象):
publicstaticvoidmain(String[]args)
{
HashSethashSet=newHashSet();
Stringa=newString("A");
Stringb=newString("B");
Stringc=newString("B");
hashSet.add(a);
hashSet.add(b);
System.out.println(hashSet.size());
Stringcz=hashSet.add(c)?"此對象不存在":"已經存在";
System.out.println("測試是否可以添加對象"+cz);
System.out.println(hashSet.isEmpty());
//測試其中是否已經包含某個對象
System.out.println(hashSet.contains("A"));
Iteratorir=hashSet.iterator();
while(ir.hasNext())
{
System.out.println(ir.next());
}
//測試某個對象是否可以刪除
System.out.println(hashSet.remove("a"));
System.out.println(hashSet.remove("A"));
//經過測試,如果你想再次使用ir變數,必須重新更新以下
ir=hashSet.iterator();
while(ir.hasNext())
{
System.out.println(ir.next());
}

}
}
/**
*通過這個程序,還可以測試樹集的添加元素的無序性與輸出的有序性
*/

importjava.util.TreeSet;
importjava.util.Iterator;

publicclassTreeSetTest
{
publicstaticvoidmain(String[]args)
{
TreeSettree=newTreeSet();
tree.add("China");
tree.add("America");
tree.add("Japan");
tree.add("Chinese");

Iteratoriter=tree.iterator();
while(iter.hasNext())
{
System.out.println(iter.next());
}
}
}

❸ java中的treeset是實現了sortedset介面的set,但為什麼要叫treeset呢

treeset實現了sortedset介面,也就是重寫了裡面的方法,但具體實現的方式由實現的子類自己編寫,所以treeset在實現set集合採用的演算法是樹型演算法。

TreeSet是一個有序集合,TreeSet中的元素將按照升序排列,預設是按照自然排序進行排列,意味著TreeSet中的元素要實現Comparable介面。或者有一個自定義的比較器。Treeset演算法:

構造一個新的空TreeSet,它根據指定比較器進行排序。插入到該set的所有元素都必須能夠由指定比較器進行相互比較:對於set中的任意兩個元素e1和e2,執行comparator.compare(e1,e2)都不得拋出ClassCastException。如果用戶試圖將違反此約束的元素添加到set中,則add調用將拋出ClassCastException。
packagetest.treeset;

importjava.util.Comparator;
importjava.util.Iterator;
importjava.util.TreeSet;

publicclassTreeSetTest{
@SuppressWarnings("unchecked")
publicstaticvoidmain(String[]args){
TreeSetts=newTreeSet(newTeacher2.TeacherCompare());
ts.add(newTeacher2("zhangsan",2));
ts.add(newTeacher2("lisi",1));
ts.add(newTeacher2("wangmazi",3));
ts.add(newTeacher2("mazi",3));
Iteratorit=ts.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
}
}

classTeacher2{
intnum;
Stringname;

Teacher2(Stringname,intnum){
this.num=num;
this.name=name;
}

publicStringtoString(){
return"學號:"+num+"姓名:"+name;
}

{//老師自帶的一個比較器
//o1中存放的事目標節點
//o2中存放時的紅黑二叉樹中的節點,從根節點開始比較
publicintcompare(Objecto1,Objecto2){
Teacher2s1=(Teacher2)o1;//轉型
Teacher2s2=(Teacher2)o2;//轉型
intresult=s1.num>s2.num?1:(s1.num==s2.num?0:-1);
if(result==0){
result=s1.name.compareTo(s2.name);
}
returnresult;
}

}

}

❹ java TreeSet問題

  1. TreeSet是集合,是用來存數據的,就像數組一樣,但TreeSet是動態的。

  2. TreeSet存的數據是無序號的,你不能通過get的方法獲得裡面的數據。

  3. TreeSet存數據是有順序的,這個順序是你規定的,規定方法就是通過實現Comparator介面。

  4. 你上面的存儲順序的規則就是static class compareToStudent implements Comparator {....... }這個方法,至於public int compareTo(Object o) {.....}那是它的一部分,你可以理解成:


    {
    ....
    if(result==0){
    publicintcompareTo(Objecto){.....}
    }
    }
    剩下的應該自己思考。。。

❺ 菜鳥 java中的TreeSet的問題

沒影響的,主要是因為這里可以用泛型,所以javac便提示可以用泛型約束來保證程序更加安全。

把TreeSet set=new TreeSet();修改成TreeSet<Integer> set = new TreeSet<Integer>();就可以不看到該提示了。

❻ 關於Java Treeset排序

例: 對加入 TreeSet的Student對象 實現Comparable介面,通過在Student中重寫compareTo()方法確定該對象在TreeSet中的排序方式 Student類如下 class Student implements Comparableprivate int age;//重寫compareTo()方法public int compareTo(Object o){Student s = (Student) o;if (this.age < s.age )return -1;else if(s.age == this.age)return 0;elsereturn 1;}當Student對象加入TreeSet時,是按年齡從小到大排序的。

❼ java TreeSet 倒序是怎麼實現的

TreeSet是一個有序的集合。

第一:構造、增加、遍歷、刪除和判斷是否包含某個元素同HashSet是一致的。、

第二:證明TreeSet是一個有序的集合。

TreeSet hashSet = new TreeSet();

hashSet.add("a"); //向集合中添加一個字元串
hashSet.add("e");
hashSet.add("b");
hashSet.add("d");
hashSet.add("c");

Iterator it = hashSet.iterator();
while(it.hasNext()){
System.out.println(it.next()+",");
}

輸出結果是:

a,
b,
c,
d,
e,

注意:(1)從結果中可以看出元素被排序了,但是這個用默認的排序方法。如何自定義排序呢?可以實現Comparator介面來自定義排序。例如:

import java.util.Comparator;

import ws.wph.android.util.StringUtils;

public class MyCmp implements Comparator {
public int compare(Object element1, Object element2) {
int x = element2.toString().compareTo(element1.toString());
return x;
}

}

然後將該類的對象作為TreeSet構造方法的實參,即TreeSet hashSet = new TreeSet(new
MyCmp());。原理是:向TreeSet增加元素時,自動調用MyCmp類的compare(Object element1, Object
element2)方法,根據方法返回值決定element1和element2的順序。(此時的輸出結果是:e,
d,
c,
b,
a,)

(2)當element1 == element2時返回0,element1 > element2 返回正數,element1 < element2返回負數。

第三:按照學生成績排序,當成績相同時按照學號排序

public int compare(Object element1, Object element2) {
int x=0;
Stuendt s1 = (Stuendt)element1;
Stuendt s2 = (Stuendt)element2;
if(s1.getScore() > s2.getScore()){
x=-1;
}else if(s1.getScore() < s2.getScore()){
x=1;
}else{
x = s1.getSno().compareTo(s2.getSno());
}
return x;
}

(3)將漢字轉換成拼音

public static String getPingYin(String src){
char[] t1 = null;
t1=src.toCharArray();
String[] t2 = new String[t1.length];
HanyuPinyinOutputFormat t3 = new HanyuPinyinOutputFormat();
t3.setCaseType(HanyuPinyinCaseType.LOWERCASE);
t3.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
t3.setVCharType(HanyuPinyinVCharType.WITH_V);
String t4="";
int t0=t1.length;
try {
for (int i=0;i<t0;i++)
{
//判斷是否為漢字字元
if(java.lang.Character.toString(t1[i]).matches("[\\u4E00-\\u9FA5]+"))
{
t2 = PinyinHelper.toHanyuPinyinStringArray(t1[i], t3);
t4+=t2[0];
}
else
t4+=java.lang.Character.toString(t1[i]).toLowerCase();
}
return t4;
}catch ( e1) {
e1.printStackTrace();
}
return t4;
}

但是需要導入一個包

❽ java中treeset的構造方法Comparator的構造方法是通過什麼怎樣比較的啊

public TreeSet(SortedSet<E> s) {
this(s.comparator());
addAll(s);
}
這是java中的寫法,public interface Comparator<T> 介面;
有 int compare(T o1, T o2); boolean equals(Object obj);
一個類實現Comparator 介面裡面的方法compare(),
看存的是什麼類型的數據,如果是基礎類型或者java中已經有的對象類型,就可以直接比較大小,一般java中的對象類型都已經實現了比較大小的方法。如果是保存自定義的類型,則需要自定義的類型實現Comprable或者Comparator這兩個介面;

❾ java TreeSet能存放兩個相同的元素嗎

TreeSet會調用集合元素的
compareTo
(Object
obj)方法來比較元素之間大小關系,然後將集合元素按升序排列,這種方式就是
自然排序
。(比較的前提:兩個內對象的類型相同),也就是說TreeSet是不能存放兩容個相同的元素的。
TreeSet繼承於Set,而Set這個集合本身是不能存放兩個相同的元素的。

❿ java中treeset定製排序和自然排序的區別

* TreeSet:
* 1.向TreeSet中添加的元素必須是同一個類的。
* 2.可以按照添加進集合中的元素的指定的順序遍歷。像String、包裝類等默認按照從小到大的順序遍歷。
* 3.自然排序:當向TreeSet中添加自定義類的對象時,有兩種排序方法:①自然排序 ②定製排序
* 4.自然排序:要求自定義類實現java.lang.Comparable介面並重寫其compareTo(Object obj)
* 在此方法中,指明按照自定義類的哪個屬性來排序。
*
* 5.向TreeSet中添加元素時,首先按照compareTo()進行比較,一旦返回0,雖然僅是兩個對象的
* 此屬性值相同,但是程序會認為這兩個對象是相同的,進而後一個對象就不能添加進來。
*
* >compareTo()與hashCode()以及equals()三者保持一致!
*

熱點內容
fedora20內核編譯 發布:2025-01-24 18:02:05 瀏覽:392
cvr網路存儲 發布:2025-01-24 17:24:52 瀏覽:415
腿套壓縮襪 發布:2025-01-24 17:05:16 瀏覽:458
電腦如何將安卓軟體卸載干凈 發布:2025-01-24 17:03:06 瀏覽:489
hello密碼怎麼破解 發布:2025-01-24 17:03:06 瀏覽:73
pspfifa無緩存 發布:2025-01-24 16:45:13 瀏覽:165
androidhandler機制 發布:2025-01-24 16:41:10 瀏覽:936
安卓系統如何下載aov 發布:2025-01-24 16:29:53 瀏覽:573
iptables允許ip訪問 發布:2025-01-24 16:19:58 瀏覽:932
安卓80如何識別存儲卡許可權 發布:2025-01-24 16:19:54 瀏覽:232