1. 程式人生 > >知識點:各種容器介紹(示例為TreeSet),TreeSet的遍歷

知識點:各種容器介紹(示例為TreeSet),TreeSet的遍歷

TreeSet的運用

/**
 * ArrayList LinkList HashSet TreeSet Comparator
 * ArrayList的ListIterator,equals(),get()
 * HashSet的hashCode()跟equals()
 * TreeSet如下例
 * HashSet TreeSet的兩者比較方法
 * @author Administrator
 *
 */
class Person implements Comparable<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;
 }
 
 public int compareTo(Person p) { //只能讓事物本身具有比較性
  //Person p = (Person)obj;
  int num = new Integer(p.getAge()).compareTo(this.getAge()); //Integer 類重寫了Oject的CompareTo()
  if (num==0)
   return p.getName().compareTo(this.getName());//String 類重寫了Oject的CompareTo()
  return num;
 }
 /*public String toString() {
  return"name" + name + "age" + age;
 }*/

}

class Student extends Person{
 Student(String name, int age) {
  super(name,age);
 }
 
}
public class Text9 {
 public static void main(String args[]) {
  TreeSet<Student> t = new TreeSet<Student>(/*new Comparator<Person>() { //Comparator 比較器的引數可以是父類
   public int compare(Person p1,Person p2) {
    int num = new Integer(p1.getAge()).compareTo(p2.getAge()); //Integer 類重寫了Oject的CompareTo()
    if (num==0)
     return p1.getName().compareTo(p2.getName());//String 類重寫了Oject的CompareTo()
    return num;
   }
  }*/);
  
  t.add(new Student("hh",20));
  t.add(new Student("gg",20));
  t.add(new Student("hh",20));
  t.add(new Student("mm",34));
  
  Iterator<Student> i = t.iterator();
  
  while(i.hasNext()) {
   Student s = (Student)i.next();
   System.out.println(s.getName() + "...." + s.getAge());
  }
  
  //print(t);
 }
 //泛型的高階應用 厲害的用法,以後繼續,<? extends Person>不能用於new()
 /*static public void print(TreeSet<? extends Person> t) {
  Iterator<? extends Person> it= t.iterator();
  while(it.hasNext()) {
   System.out.println(it.next());
  }
 }*/
 
 static public<T> void print(TreeSet<T> t) { //任意型別 Collection<T> t 容器都任意了
  Iterator<T> it = t.iterator();
  while(it.hasNext()) {
   System.out.println(it.next());
  }
 }

}
思考與感悟:

collectioin裡面有兩大分支,List 跟Set

list以下陣列下標進行迭代。所以list的遍歷比較高效。

Set是有比較的陣列。HashSet是先進行hashCode()後,當結果相等時,進行equals()比較。當你要改變它的比較方式時,必須過載這兩個函式。

TreeSet也是有比較的,但是除了一些JDK裡面定義了的類之外。自定義的類必須讓它本身具有比較性。不然TreeSet都不讓你進。除了讓物件本身具有比較性。也可以在列表初始化的時候載入一個比較器。注意的是,比較器的比較先進行,再到物件自己的比較。

還有就是泛型,一個我很陌生的玩意。但我覺得很好用。因為相容性很強。無論實在函式還是類。它都可以決定你要處理的類的型別。真心不錯。可惜我現在還沒有用它的習慣。

import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;

/**
 *用TreeMap實現從一串字元陣列中找出每個字母出現的次數
 * @author Administrator
 *
 */
public class Text11 {
 public static void paixu() {
  String str = "ahfijoaofefn";
  int i = 0,num = 0;
  
  char ch[] = str.toCharArray();
  TreeMap<Character,Integer> t = new TreeMap<Character,Integer>();
  
  while(i < ch.length) {
   if(!t.containsKey(ch[i]))
    t.put(ch[i], 1);
   else {
    num = t.get(ch[i]);
    t.put(ch[i], ++num);
   }
   i++;
   
  }
  //第一種遍歷方法
  /*Set<Character> set = t.keySet();
  Iterator<Character> it = set.iterator();
  
  while(it.hasNext()) {
   char c = it.next();
   System.out.println("<" + c + "," + t.get(c) + ">");
  }*/
  //第二種遍歷方法
  /*Set<Map.Entry<Character,Integer>> set = t.entrySet();
  Iterator<Map.Entry<Character,Integer>> it = set.iterator();
  while(it.hasNext()) {
   Map.Entry<Character,Integer> ety = it.next();
   System.out.println("<" + ety.getKey() + "," + ety.getValue() + ">");
  }*/
  //
  //第三種遍歷方法
  Set<Map.Entry<Character,Integer>> set = t.entrySet();
  for(Map.Entry<Character,Integer> ety:set) {
   System.out.println("<" + ety.getKey() + "," + ety.getValue() + ">");
  }
 }
 
 public static void main(String args[]) {
  paixu();
 }
}

思考與感悟:

我為什麼寫了這段程式碼,是因為這兩個遍歷都不好記,所以才實現一遍。但是在Properties的時候會用到。這個屬性類在往後寫程式碼的時候很可能碰到。所以先練練。

相關推薦

知識點各種容器介紹示例TreeSet,TreeSet

TreeSet的運用 /**  * ArrayList LinkList HashSet TreeSet Comparator  * ArrayList的ListIterator,equals(),get()  * HashSet的hashCode()跟equals()

知識點十點掌握MarkDown平時書寫足夠

1.首行縮排 格式(不要忘了分號): 半方大的空白&ensp; 或 &#8194; 全方大的空白&emsp; 或 &#8195; 不斷行的空白&nbsp; 或 &#160; 2.程式碼塊 格式: 如果引用的語句只有一行,可以用

python基礎五元組的index,del,count方法及字典的修改、增加、刪除del、clearkeys、values、items

元組:index、del、count的方法。index的用法:用來查詢元組中元素對應的下標。格式:元組變數名.index(查詢的元素)例項:    del的用法:用來刪除整個元組。格式:del       元組變數名例項:      count的用法:用來統計元組中指定元素的

二叉樹的建立先序輸入輸出模板

#include<iostream> using namespace std; typedef struct node { struct node *lchild; struct node *rchild; char dat

關聯容器unordered_map詳細介紹附可執行程式碼

1.介紹 最近使用到一個c++的容器——unordered_map,它是一個關聯容器,內部採用的是hash表結構,擁有快速檢索的功能。 1.1 特性 關聯性:通過key去檢索value,而不是通過絕對地址(和順序容器不同) 無序性:

阿裏面試總結如何介紹自己的項目經驗Java

公司 http ring 親戚 方向 img qq群 項目經驗 減少 序言 在面試時,經過寒暄後,一般面試官會讓你介紹項目經驗。常見的問法是:“說下你最近的(或最拿得出手的)一個項目”。 可能不少程序員對此沒準備,說起來磕磕巴巴,甚至有人說出項目經驗從時間段或技術等方面和簡

python 學習彙總29各種推導式 tcy

python的各種推導式(輕量級迴圈) 2018 / 6 / 16   1.推導式用途: 推導式是從一個數據序列構建一個新的資料序列的結構體,類似於for 迴圈 列表/字典/集合推導式優於 map/filter       2.基本格式

跨平臺方法獲取檔案大小引數檔案url

在一些實際的專案中,我們需要去計算某目錄下的某個檔案的大小,從而繼續後續的業務; 如下的方法是各個平臺通用的方法,簡潔實用,已經驗證和測試過: #include <stdint.h> #include <stdio.h> #include <stdlib.h

21天轉型雲容器實戰雲學習

手把手執行一個映象 1、容器的特點2、啟動容器的引數3、 docker run -d -it --name test -p 900:8080 -v /opt/:/usr/local/ 78b258e36eed -d 後臺執行容器 -it 保持stdin和為容器建立tty虛擬終端。 --name 為容

生成十個0~100之間的隨機數,放到陣列中,然後排序輸出。知識點Math類取整,獲得隨機數等 [必做題]

import java.util.Arrays; import java.util.Scanner; public class 隨機陣列排序 { public static void main(String[] args) { Scanner s = new Scanner(Syst

Pyqt5Buttons基礎介紹

Buttons按鍵也是在Qt中常用的一種控制元件,Buttons常用的三種按鍵,pushbutton,checkbox,radiobutton。 UI介面: 其中有三個textBrowser用來顯示列印資訊,測試訊號槽。 pushbutton: 連線

機器人行走 * 某少年宮引進了一批機器人小車。可以接受預先輸入的指令,按指令行動。小車的基本動作很簡單,只有3種左轉L,右轉R,向前走若干釐米直接記數字。 例如,我們

/** * 某少年宮引進了一批機器人小車。可以接受預先輸入的指令,按指令行動。小車的基本動作很簡單,只有3種:左轉(記為L),右轉(記為R),向前走若干釐米(直接記數字)。 例如,我們可以對小車輸入如下的指令: 15L10R5LRR10R20 則,小車先

機器人行走 某少年宮引進了一批機器人小車。可以接受預先輸入的指令,按指令行動。小車的基本動作很簡單, 只有3種左轉L,右轉R,向前走若干釐米直接記數字

/*機器人行走 * 【程式設計題】(滿分18分) 某少年宮引進了一批機器人小車。可以接受預先輸入的指令,按指令行動。小車的基本動作很簡單, 只有3種:左轉(記為L),右轉(記為R),向前走若干釐米(直接記數字)。 例如,我們可以對小車輸入如下的指令

手把手做一個JSP入門程式程式基本介紹JSP

胡扯   說好的不學jsp,結果今天還是學了。主要還是為了後面的java後臺的學習啦。為了更好的掌握知識,那我們就來寫一個簡單的jsp入門程式吧!這只是一個簡單的入門小程式,所以就沒有太多強大的功能。入門啦,入門啦。對了,由於是作為一個入門程式,所以裡面會有較

Python實現讀取多個/批量txt檔案合併成一個txt示例tcga資料處理

本程式 功能:將tcga資料的批量txt檔案合併成一個txt原始的第一個txt(代表一個病人)的資料內容 合併之後的txt資料,基因名不變,只是把病人的表達量收集到一起 操作說明:本人測試通過的執行環境:Python 2.7  Windows 7 64bit  cmd命令執行

MATLAB圖形加法運算imadd函數

class 當前 背景 src imshow width color -1 修改 close all; %關閉當前所有圖形窗口,清空工作空間變量,清除工作空間所有變量 clear all; clc; I=imread(‘rice.

一個技術人,最重要的是極客精神好奇心 + 探索欲

重要 大神 net 最大的 程序員 領域 實戰 探索 市場需求 一個技術人,最重要的是:極客精神(好奇心 + 探索欲) 初到社會,面對眾多的IT企業,我們是陌生與好奇的,認為所有企業都是管理一流並且高大上等的。然而工作多年以後你會發現,國內的

【Java並發編程】之十三生產者—消費者模型含代碼

tool boolean 通知 阻塞 上一個 [] ble 否則 線程 轉載請註明出處:http://blog.csdn.net/ns_code/article/details/17249321 生產者消費者問題是線程模型中的經典問題:生產者和消費者在同一時間段

白話空間統計之九方向分布標準差橢圓修正版

傳播 easy 概率 log 地下水 img lib 最終 行為 文章用紅色字體標記出來的內容是修正後的內容,感謝四川的楊同學對我曾經的錯誤提出指正。 最終寫到我最喜歡的一個的工具(算法)了。方向分布是蝦神我接觸的第一個空間統計工具,也是每次講空間統計必需要講的一

Linux時間子系統之八動態時鐘框架CONFIG_NO_HZ、tickless

sleep file rup linux時間 load 曾經 大致 獲取 conf 在前面章節的討論中,我們一直基於一個假設:Linux中的時鐘事件都是由一個周期時鐘提供,不管系統中的clock_event_device是工作於周期觸發模式,還是工作於單觸發模式,也不管定時