《简介》

java for 中 某元素的下标 java集合下标_List

java for 中 某元素的下标 java集合下标_List_02

 

 《Collection》

java for 中 某元素的下标 java集合下标_java_03

 

首先:Collection是个接口类,其身上有许多方法都是由其子类实现

注意:该 contains() 方法内部其实使用 equals() 方法来查找元素。如果指定的元素与数组中的元素有匹配到,则该方法返回 true。

java for 中 某元素的下标 java集合下标_java for 中 某元素的下标_04

 《ArrayList》

import java.util.ArrayList;

ArrayList类有点像封装过后的结构体,可以接受各种类型的数据

java for 中 某元素的下标 java集合下标_数组_05

 《迭代器》

java for 中 某元素的下标 java集合下标_java_06

 

在Iterable这个接口上有一个重要的方法:

java for 中 某元素的下标 java集合下标_List_07

 

 

java for 中 某元素的下标 java集合下标_List_08

import java.util.Iterator;

 

 

java for 中 某元素的下标 java集合下标_java for 中 某元素的下标_09

 

 《增强for循环》

底层增强for循环就是调用iterator来实现的

 《List接口》

注意:这并不是说可以像数组一样( ArrayList arr)arr[1],这样用下标直接访问,还是要用迭代器来访问

或者用方法arr.get(1),可以返回下标为1的元素

改变某一下标的元素用 arr.set(index,elememt);

java for 中 某元素的下标 java集合下标_List_10

 

 

java for 中 某元素的下标 java集合下标_数组_11

 

以下是List独有的重写了的方法:

java for 中 某元素的下标 java集合下标_java for 中 某元素的下标_12

 

java for 中 某元素的下标 java集合下标_java_13

 《ArrayList》

java for 中 某元素的下标 java集合下标_List_14

 

 《ArrayList的扩容机制》

在 ArrayList arr = new ArrayList(N); 这里是可以写数的,即指定初始化数组大小

《Vector》

java for 中 某元素的下标 java集合下标_数组_15

 

java for 中 某元素的下标 java集合下标_java_16

 《LinkedList》

链表(双向)

java for 中 某元素的下标 java集合下标_数组_17

操作API与上面相同

《Set》

java for 中 某元素的下标 java集合下标_java for 中 某元素的下标_18

 

 

java for 中 某元素的下标 java集合下标_java for 中 某元素的下标_19

 

 

java for 中 某元素的下标 java集合下标_List_20

 

 《HashSet》

import java.util.HashSet;

java for 中 某元素的下标 java集合下标_java for 中 某元素的下标_21

 

 

java for 中 某元素的下标 java集合下标_java_22

 

 《HashSet底层分析》

java for 中 某元素的下标 java集合下标_java for 中 某元素的下标_23

 

所以在添加时有如下:

java for 中 某元素的下标 java集合下标_数组_24

在String中,其hashCode方法得到了重写,是只将其value(字符串)来进行hash,如果字符串内容相同,那么hashCode的值也相同

所以我们可以重写hashCode和equals方法来使得HashSet能否能放进去:

1 package com.collection;
 2 
 3 import java.util.HashSet;
 4 import java.util.Objects;
 5 
 6 public class SetHomeWork {
 7     public static void main(String[] args) {
 8         HashSet hset = new HashSet();
 9         hset.add(new Dog("tom", 18));
10         hset.add(new Dog("tom", 18));
11     }
12 
13     static class Dog {
14         String name;
15         int age;
16 
17         public Dog(String name, int age) {
18             this.name = name;
19             this.age = age;
20         }
21 
22         @Override
23         public boolean equals(Object obj) {
24             if (this == obj) return true;
25             if (obj instanceof Dog) {
26                 Dog t = (Dog) obj;
27                 if (this.name.equals(t.name) && this.age == this.age)
28                     return true;
29                 else return false;
30             } else return false;
31         }
32 
33         @Override
34         public int hashCode() {
35             return Objects.hash(name, age);
36         }
37     }
38 }

《练习题》

java for 中 某元素的下标 java集合下标_java_25

 

 

java for 中 某元素的下标 java集合下标_数组_26

 

总结:没事不要乱改已经加入Set的值,会出BUG,

重写hashCode方法是为了计算出加入位置,然后加入用的

重写equals方法是为了如果hash冲突,看一下是否相同,决定是否加入

《LinkHashSet》

java for 中 某元素的下标 java集合下标_数组_27

java for 中 某元素的下标 java集合下标_java_28

 《TreeSet》

TreeSet的底层是TreeMap

java for 中 某元素的下标 java集合下标_java for 中 某元素的下标_29

底层比较:

java for 中 某元素的下标 java集合下标_java_30


我们在new TreeSet时,可以在其中传入比较匿名内部类,通过这个的比较规则,如果相同就不加进去(TreeSet没有重复元素的原因)

java for 中 某元素的下标 java集合下标_java_31

 否则在tset.add();加入元素时就按照这个规则顺序加入

java for 中 某元素的下标 java集合下标_数组_32

 《练习题》

java for 中 某元素的下标 java集合下标_List_33

没有指定匿名内部类,底层无法比较会抛出异常

java for 中 某元素的下标 java集合下标_List_34

《Map》

java for 中 某元素的下标 java集合下标_java for 中 某元素的下标_35

java for 中 某元素的下标 java集合下标_List_36

java for 中 某元素的下标 java集合下标_List_37

 《Map常用方法》

java for 中 某元素的下标 java集合下标_java_38

 

java for 中 某元素的下标 java集合下标_java_39

 

 《Map遍历方式(以HashMap为例)》

java for 中 某元素的下标 java集合下标_List_40

 

 

java for 中 某元素的下标 java集合下标_数组_41

 

在Map类中一个包含 指向Key和对应Value的集合 为Entry,在MapSet中其运行类型是MapSet$Node,

而这些Entry的集合为EntrySet,在Entry这个类型中有获得Key和Value的方法,所以要转型

java for 中 某元素的下标 java集合下标_List_42

java for 中 某元素的下标 java集合下标_List_43

java for 中 某元素的下标 java集合下标_List_44

 

 《HashTable》

java for 中 某元素的下标 java集合下标_数组_45

 

java for 中 某元素的下标 java集合下标_java for 中 某元素的下标_46

 

 《Properties》

java for 中 某元素的下标 java集合下标_java for 中 某元素的下标_47

 

 《Collections工具类》

java for 中 某元素的下标 java集合下标_数组_48

 

注意:首先不要将他与Collection这个接口弄混淆了,Collections是一个类

java for 中 某元素的下标 java集合下标_List_49

使用方法:Collections.reverse(arr);等

《总结》

java for 中 某元素的下标 java集合下标_数组_50

注意:Collections工具类提供的sort, reverse等位置改变的方法是只能List类传进去的,而Set类不行

所以用HashSet注定是无序的,但是用TreeSet可以是有序的

《栈和队列》

根据网上的说法:Stack被弃用了,一般都是可以用队列Queue去模拟栈

那就来说说队列吧:

java for 中 某元素的下标 java集合下标_数组_51

 


 

java for 中 某元素的下标 java集合下标_List_52

 

但是单纯的队列一般更多人喜欢用LinkedList去模拟实现

java for 中 某元素的下标 java集合下标_数组_53

 


常用方法:

java for 中 某元素的下标 java集合下标_java_54