知識點:各種容器介紹(示例為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.首行縮排 格式(不要忘了分號): 半方大的空白  或   全方大的空白  或   不斷行的空白 或   2.程式碼塊 格式: 如果引用的語句只有一行,可以用
python基礎五:元組的index,del,count方法及字典的修改、增加、刪除(del、clear)、遍歷(keys、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
Pyqt5:Buttons基礎介紹(一)
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是工作於周期觸發模式,還是工作於單觸發模式,也不管定時