java泛型
泛型:參數化類型.將具體的類型參數化,將類型定義爲參數形式.在調用時傳入具體的類型
泛型的本質是爲了參數化類型(在不創建新的類型的情況下,通過泛型指定的不同類型來控制形參具體限制的類型)。
特點
泛型類型在邏輯上看以看成是多個不同的類型,實際上都是相同的基本類型。
泛型的使用
在泛型使用過程中,操作的數據類型被指定爲一個參數,這種參數類型可以用在類、接口和方法中,分別被稱爲泛型類、泛型接口(自學)、泛型方法。
/**
* @Author HuangTang
* @Date 2019/9/19 - 8:22
*/
class objectToolDemon<T>{
private T obj;
public T getobj(){
return obj;
}
public void setobj(T obj){
this.obj=obj;
}
}
public class tooldemo{
public static void main(String[] args) {
objectToolDemon ot = new objectToolDemon();
ot.setobj(new String("劉備"));
String s = (String)ot.getobj();
System.out.println(s);
ot.setobj(new Integer(40));
Integer i = (Integer) ot.getobj();
System.out.println(i);
}
}
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-PRua0PJ4-1573690491410)(./1568853323690.png)]
/**
* @Author HuangTang
* @Date 2019/9/19 - 8:22
*/
class objectToolDemon<T>{
private T obj;
public T getobj(){
return obj;
}
public void setobj(T obj){
this.obj=obj;
}
}
public class tooldemo{
public static void main(String[] args) {
objectToolDemon<String> ot = new objectToolDemon<String>();
//泛型的自動偵測
ot.setobj(new String("劉備"));
String s = (String)ot.getobj();
System.out.println(s);
// ot.setobj(new Integer(40));
// Integer i = (Integer) ot.getobj();
// System.out.println(i);
}
}
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-NWyPFjyq-1573690491414)(./1568854420446.png)]
/**
* @Author HuangTang
* @Date 2019/9/19 - 8:35
*/
class objectTool{
public void show(String s){
System.out.println(s);
}
public void show(boolean b){
System.out.println(b);
}
public void show(Integer i){
System.out.println(i);
}
}
public class methodDemo {
public static void main(String[] args) {
objectTool ot2 = new objectTool();
ot2.show("hello");
ot2.show(true);
ot2.show(123);
}
}
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-fCO1TzHs-1573690491416)(./1568853695273.png)]
/**
* @Author HuangTang
* @Date 2019/9/19 - 8:35
*/
//泛型類
class objectTool<T>{
//泛型方法
public <T> void show(T s){
System.out.println(s);
}
// public void show(boolean b){
// System.out.println(b);
// }
// public void show(Integer i){
// System.out.println(i);
// }
}
public class methodDemo {
public static void main(String[] args) {
objectTool ot2 = new objectTool();
ot2.show("hello");
ot2.show(true);
ot2.show(123);
}
}
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-4qZ94Xhr-1573690491417)(./1568854811847.png)]
課後任務
- 泛型接口
- jdk’1.5 中泛型新增內容
通配符
extend : 向下限定
super: 向上限定 - 查看ArrayList源代碼
set
import java.util.HashSet;
import java.util.Set;
/**
* @Author HuangTang
* @Date 2019/9/19 - 9:17
*/
public class studySet {
public static void main(String[] args) {
Set<String> set = new HashSet<String>();
set.add("java1");
set.add("java2");
set.add("java3");
set.add("java4");
set.add("java5");
set.add("java6");
set.add("java6");
//遍歷集合: 1. toarray 2.iterator 3.此處不可用 .size()+.get() 4.增強for
for(String s:set){
System.out.println(s);
}
}
}
第一次運行
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-zbg36V00-1573690491418)(./1568856346630.png)]
第二次運行
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-TpoJzJl4-1573690491418)(./1568856373405.png)]
#hashset
由hash表(hashmap)支持
一個hash值對應一個集合
hash值相同的歸爲一類
hashset元素唯一性: 先比較hashcode 再用equals比較值