?? Author: 老九
?? 個(gè)人博客:老九的CSDN博客
?? 個(gè)人名言:不可控之事 樂(lè)觀面對(duì)
?? 系列專欄:
collection
Collection 接口,在 Java 當(dāng)中,Collection 也是重要的數(shù)據(jù)結(jié)構(gòu)。
Collection創(chuàng)建
在創(chuàng)建 Collection 的時(shí)候,要通過(guò) new 關(guān)鍵字來(lái)使用。但是查看 Collection 源碼的時(shí)候,發(fā)現(xiàn) Collecting 是一個(gè)接口:
**因?yàn)榻涌谑遣荒軐?shí)例化的,所以 new 的時(shí)候,要用一個(gè)具體的類。**這里用ArrayList來(lái)舉例:
Collection collection = new ArrayList();
collection使用泛型
使用泛型就是加上 <> 里面寫元素類型,要注意的是,這里的類型全是包裝類。字符串的包裝類是:String 整形的包裝類是:Integer 。寫了包裝類的話,add 的時(shí)候就只能添加這一類型:
public static void main(String[] args) {
Collection<String> collection = new ArrayList<String>();
collection.add("hello");
collection.add("word");
System.out.println(collection);
}
Collection 后面的 String 可以不寫,因?yàn)椴粚懙脑?,編譯器會(huì)通過(guò)前面的 String 來(lái)推導(dǎo)出相應(yīng)的類型。如果這里 add 非字符類型的話,就會(huì)報(bào)錯(cuò)。運(yùn)行結(jié)果如下:
collection方法
Collection 里面有很多自帶的方法:
使用代碼測(cè)試:
public static void main(String[] args) {
Collection<String> collection = new ArrayList<>();
collection.add("hello");
collection.add("word");
System.out.println(collection);
System.out.println(collection.size());
System.out.println(collection.isEmpty());
collection.remove("word");
System.out.println(collection);
Object[] objects = collection.toArray();
System.out.println(Arrays.toString(objects));
System.out.println(objects);
}
Map 接口
Map 是在 util 包下的接口。Map 有兩個(gè)參數(shù) <key,val> ,而且這兩個(gè)參數(shù)必須是字符串。實(shí)現(xiàn) Map 的方法 有HashMap 和 TreeMap 。Map 的基本功能如下
public static void main(String[] args) {
Map<String,String> map = new HashMap<>();
map.put("Lockey","魯班鎖");
map.put("及時(shí)雨","宋江");
String ret = map.get("及時(shí)雨");
String tmp = map.getOrDefault("及時(shí)雨1","FM850");
System.out.println(ret);
System.out.println(tmp);
boolean flag = map.containsKey("Lockey");
System.out.println(flag);
}
Map的存儲(chǔ)結(jié)構(gòu)
- map在存儲(chǔ)的時(shí)候,并不是順序存儲(chǔ)的,而是通過(guò)映射去存儲(chǔ)的。代碼示例:
public static void main(String[] args) {
Map<String,String> map = new HashMap<>();
map.put("及時(shí)雨","宋江");
map.put("Lockey","魯班鎖");
System.out.println(map);
}
先輸出 “Lockey” 然后才是 “及時(shí)雨” 。
HashMap和TreeMap的有序和無(wú)序
- HashMap存儲(chǔ)的時(shí)候是根據(jù)key值排序的,是有序的。
- TreeMap放入的時(shí)候沒(méi)有進(jìn)行比較,沒(méi)有排序。
public static void main(String[] args) {
Map<Integer,String> map = new HashMap<>();
map.put(10,"宋江");
map.put(3,"魯班鎖");
System.out.println(map);
Map<String,String> map2 = new HashMap<>();
map2.put("efg","宋江");
map2.put("abc","魯班鎖");
System.out.println(map2);
Map<String,String> map3 = new TreeMap<>();
map3.put("及時(shí)雨","宋江");
map3.put("國(guó)民女神","魯班鎖");
System.out.println(map3);
Map<String,String> map4 = new HashMap<>();
map4.put("及時(shí)雨","宋江");
map4.put("國(guó)民女神","魯班鎖");
System.out.println(map4);
}
包裝類
包裝類是根據(jù)基本類型出現(xiàn)的,八大基本類型對(duì)應(yīng)著八種包裝類:
要注意的是:String 不是包裝類。**包裝類的好處在于:可以完成對(duì)數(shù)據(jù)的操作。**例如:把字符串變?yōu)檎危?/p>
public static void main(String[] args) {
String str = "123";
int ret = Integer.valueOf(str);
System.out.println(ret+1);
}
裝箱與拆箱(裝包與拆包)
裝箱:把簡(jiǎn)單數(shù)據(jù)類型變?yōu)榘b類類型
拆箱:把包裝類類型變?yōu)楹?jiǎn)單數(shù)據(jù)類型
代碼示例,這里是隱式的:
public static void main(String[] args) {
//裝箱
Integer a = 123;
//拆箱
int b = a;//隱式的:因?yàn)榘?Integer 變?yōu)?int 了
System.out.println(a+" "+b);
}
下面我們通過(guò) powershell 窗口來(lái)看編譯的過(guò)程:
可以看到,畫圈的部分就是兩次過(guò)程。第一次是通過(guò) Integer 的 valueOf 來(lái)把 123 變成 Integer 類。第二次則是通過(guò) Integer 的 intValue 來(lái)變成 int 類型。下面的就是字符串的拼接了。
顯式拆包:
通過(guò)直接將方法寫出來(lái),一看就明白了的方法就是顯式的:
public static void main(String[] args) {
//這里就是顯式的裝包
Integer a2 = Integer.valueOf(123);
Integer a3 = new Integer(123);
//顯式的拆包
int b2 = a2.intValue();
double d = a2.doubleValue();
}
LIst
List使用
在使用 List 的時(shí)候,后面括號(hào)可以加參數(shù),也可以不加參數(shù),加的參數(shù)是表示容量大?。?/p>
public static void main(String[] args) {
List<String> list1 = new ArrayList<>(20);
List<String> list2 = new ArrayList<>();
}
List 是一個(gè)很大的類,這里用它下層的 ArrayList :
public static void main(String[] args) {
ArrayList<String> list2 = new ArrayList<>();
list2.add("hello");
list2.add("word");
list2.add("123");
System.out.println(list2);
ArrayList<String> list3 = new ArrayList<>(list2);
System.out.println(list3);
}
可以使用另外一個(gè) Array List 對(duì) list 初始化:這里的 list3 就是用 list2 來(lái)進(jìn)行初始化。
List的多種輸出方式
直接通過(guò)字符串輸出
public static void main(String[] args) {
ArrayList<String> list2 = new ArrayList<>();
list2.add("hello");
list2.add("word");
list2.add("123");
System.out.println(list2);
}
通過(guò)for循環(huán)打印
- 用size()獲取長(zhǎng)度,用add()添加,用get(int)獲取
public static void main(String[] args) {
ArrayList<String> list2 = new ArrayList<>();
list2.add("hello");
list2.add("word");
list2.add("123");
for (int i = 0; i < list2.size(); i++){
System.out.println(list2.get(i));
}
}
通過(guò)foreach輸出
public static void main(String[] args) {
ArrayList<String> list2 = new ArrayList<>();
list2.add("hello");
list2.add("word");
list2.add("123");
for (String s:list2) {
System.out.println(s);
}
}
通過(guò)迭代器打印
- 通過(guò)使用List的方法:iterator()來(lái)完成輸出
public static void main(String[] args) {
ArrayList<String> list2 = new ArrayList<>();
list2.add("hello");
list2.add("word");
list2.add("123");
System.out.println("迭代器打印");
Iterator<String> i = list2.iterator();
while (i.hasNext()) {
System.out.println(i.next());
}
}
List的API
add
List 當(dāng)中的 add 方法,默認(rèn)是放在最后一個(gè)位置的:
public static void main(String[] args) {
//add 方法 默認(rèn)是放到數(shù)組的最后一個(gè)位置的
ArrayList<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
System.out.println(list);
}
通過(guò)增加一個(gè)參數(shù)index的add方法
通過(guò)在 add 方法放第一次參數(shù),將元素放到某個(gè)位置下面:
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
System.out.println(list);
list.add(0,"Lockey");
System.out.println(list);
}
把一個(gè) List 放在另一個(gè) List 后面
通過(guò) List 的方法 addALL 來(lái)完成,代碼如下:
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
System.out.println(list);
ArrayList<String> list1 = new ArrayList<>();
list1.add("qwe");
list1.add("rty");
list1.addAll(list);
System.out.println(list1);
}
刪除某個(gè)值
通過(guò) remove 方法來(lái)完成刪除:
public static void main9(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
System.out.println(list);
boolean flag = list.remove("a");
System.out.println(flag);
System.out.println(list);
}
獲取某個(gè)下標(biāo)的值
通過(guò) get 方法來(lái)完成獲?。?/p>
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
String ret = list.get(1);
System.out.println(ret);
}
更改某個(gè)位置的值
通過(guò) set 方法來(lái)完成:
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
list.set(1,"d");
System.out.println(list);
}
清空List
通過(guò) clear 方法來(lái)完成:
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
list.clear();
System.out.println(list);
}
Map的API
map 和 set 是一種專門用來(lái)搜索和查詢的容器或數(shù)據(jù)結(jié)構(gòu),效率很高。是為了解決在 “增刪查改” 情況下使用的數(shù)據(jù)結(jié)構(gòu)。
HashMap 在存儲(chǔ)元素的時(shí)候,是根據(jù)一個(gè)函數(shù)進(jìn)行存儲(chǔ)的,具體存儲(chǔ)到哪里,由函數(shù)來(lái)確定。這個(gè)函數(shù)就是哈希函數(shù)。所以輸出的時(shí)候,并不是按照存儲(chǔ)順序進(jìn)行輸出的。Map是一個(gè)接口類,沒(méi)有繼承自Collection,類中存儲(chǔ)的是 <K,V> 結(jié)構(gòu)的鍵值對(duì),并且 K 一定是唯一的,不能重復(fù)。在遇到相同的 K 的時(shí)候,V 是可以改變的。
put
在 map 當(dāng)中,put 是放入元素的意思,有兩個(gè)參數(shù),第一個(gè)是 key ,第二個(gè)是 value ,代碼如下:
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<>();
map.put("abc",3);
map.put("word",2);
map.put("hello",4);
System.out.println(map);
}
輸出的時(shí)候按照key值從大到小輸出。
put 如果存儲(chǔ)元素的時(shí)候,如果 key 值相同的話,val 值會(huì)覆蓋。代碼如下:
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<>();
map.put("abc",3);
map.put("word",2);
map.put("hello",4);
map.put("abc",5);
System.out.println(map);
}
get
使用 get 通過(guò) key 來(lái)獲取對(duì)應(yīng)的 value 的值。代碼如下:
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<>();
map.put("abc",3);
map.put("word",2);
map.put("hello",4);
int ret = map.get("abc");
System.out.println(ret);
}
getOrDefault
getOrDefault 方法有兩個(gè)參數(shù),一個(gè)是 key ,如果沒(méi)有 key 的話,就返回設(shè)置的默認(rèn)值。如果有 key 的話,就返回 key 的 value 。代碼如下:
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<>();
map.put("abc",3);
map.put("word",2);
map.put("hello",4);
System.out.println(map.getOrDefault("abc",98));
}
因?yàn)?abc 存在,所以返回 abc 的 value 。就是 3 。
remove
remove 方法有一個(gè)參數(shù),參數(shù)是輸入的 key ,返回對(duì)應(yīng)的 value 。如果沒(méi)有 key 的話,就返回 null 。代碼如下:
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<>();
map.put("abc",3);
map.put("word",2);
map.put("hello",4);
Integer ret2 = map.remove("abc");
System.out.println(ret2);
}
Set的API
set 是一個(gè)集合,存入里面的數(shù)據(jù)會(huì)自動(dòng)去重。Set 是繼承自 Collection 的接口類,Set 中只存儲(chǔ)了 Key 。
set 自動(dòng)去重
放入 set 的數(shù)據(jù)會(huì)自動(dòng)去重,代碼如下:
public static void main4(String[] args) {
Set<Integer> set = new HashSet<>();
set.add(1);
set.add(2);
set.add(3);
set.add(1);
System.out.println(set);
}
contains是否包含
remove刪除
isEmpty()判空
clear()清空
靜態(tài)內(nèi)部類
1.外部類可通過(guò)內(nèi)部類的對(duì)象調(diào)用內(nèi)部類的私有成員變量或方法。
2.靜態(tài)內(nèi)部類訪問(wèn)外部類的靜態(tài)成員變量或方法必須是靜態(tài)的。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-723956.html
???碼字不易,大家的支持就是我堅(jiān)持下去的動(dòng)力???
版權(quán)聲明:本文為CSDN博主「亞太地區(qū)百大最帥面孔第101名」的原創(chuàng)文章文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-723956.html
到了這里,關(guān)于【JAVA】集合與背后的邏輯框架,包裝類,List,Map,Set,靜態(tài)內(nèi)部類的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!