手機(jī)網(wǎng)站開(kāi)發(fā) c資源網(wǎng)站優(yōu)化排名優(yōu)化
List
元素存放有序,元素可重復(fù)
1.LinkedList
鏈表,插入刪除,非線性安全,插入和刪除操作是雙向鏈表操作,增加刪除快,查找慢
add(E e)//添加元素
addFirst(E e)//向集合頭部添加元素
addList(E e)//向集合尾部添加元素
getLast() //獲取集合最后一個(gè)元素
removeFirst()//移除集合中第一個(gè)元素
pop()//移除集合中第一個(gè)元素
removeLast()//移除集合中最后一個(gè)元素
clear() //清除列表
isEmpty()//判斷集合是否為空
2.ArrayList
數(shù)組,隨機(jī)訪問(wèn),非線性安全,效率高,增加刪除慢,查找快
添加
add(E e)
add(int index,E e)//指定位置添加set(int index,E e)//替換某個(gè)有毒,返回被替換的因素List<String> list = new ArrayList<>();//多態(tài)寫(xiě)法
list.add("1");
list.add("2");
list.add("3");
System.out.println(list);
//替換某個(gè)元素,并返回被替換的元素
String a = list.set(1, "A");
System.out.println("被替換的元素為:" + a);
System.out.println(list);打印結(jié)果:
[1, 2, 3]
被替換的元素為:2
[1, A, 3]
//迭代遍歷
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {System.out.println(iterator.next());
}
刪除
remove(int index)//移除指定索引元素
remove(Object o)
//建議采用遍歷器進(jìn)行刪除
Iterator<String> iter = aList.iterator(); while(iter.hasNext()){ if(iter.next().equals("abc")){ iter.remove(); }
3.Vector
數(shù)組,線程安全,效率低,支持添加,移除,替換,允許null的因素存在。
Set
元素存放無(wú)序(存放元素和取出的順序可能不一樣),元素不重復(fù),但是對(duì)象需要重寫(xiě)hasCode和equals進(jìn)行去重,沒(méi)有索引所以不能使用普通for循環(huán)遍歷
1.HashSet
不安特定方式排列,沒(méi)有重復(fù)元素會(huì)對(duì)添加的元素進(jìn)行去重,采用哈希算法來(lái)存取集合元素,存取速度比較快。
add(E e)//添加元素,自動(dòng)去重Set<Integer> set = new HashSet<>();
set.add(1);
set.add(2);
set.add(2);
//使用功能迭代器遍歷,不能使用普通for遍歷
Iterator<Integer> iterator = set.iterator();
while (iterator.hasNext()){System.out.println(iterator.next());
}
打印結(jié)果:
1
2
如果是HashSet存儲(chǔ)自定義類型的元素,比如bean對(duì)象,需要重寫(xiě)hasCode和equals進(jìn)行去重
public class Person {private String name;private int age;public Person() {}public Person(String name, int age) {this.name = name;this.age = age;}@Overridepublic String toString() {return "Person{" +"name='" + name + '\'' +", age=" + age +'}';}@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Person person = (Person) o;return age == person.age &&Objects.equals(name, person.name);}@Overridepublic int hashCode() {return Objects.hash(name, age);}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}
}//創(chuàng)建HashSet集合存儲(chǔ)PersonHashSet<Person> people = new HashSet<>();Person person1 = new Person("aa", 15);Person person2 = new Person("ww",16);Person person3 = new Person("ww",16);people.add(person1);people.add(person2);people.add(person3);System.out.println(people);輸出:[Person{name='aa', age=15}, Person{name='ww', age=16}]
2.LinkedHashSet
具有HashSet的查詢速度,底層是一個(gè)哈希表,數(shù)組+鏈表/紅黑樹(shù)+鏈表,多了一條鏈表記錄元素存儲(chǔ)順序,
存儲(chǔ)數(shù)據(jù)的方式和HashSet一樣,包括去重的方式,唯一的不一樣點(diǎn)就是LinkedHashSet內(nèi)部是有序的
Map
元素按鍵值對(duì)存儲(chǔ),無(wú)序 ;
key和value一一對(duì)應(yīng)關(guān)系;
key和value的數(shù)據(jù)類型可以相同也可以不同;
key不允許重復(fù),value可以重復(fù);
1.HashMap
非線程安全,無(wú)序,支持存儲(chǔ)鍵值均為null,沒(méi)有contains方法,改成containsValue和containsKey,內(nèi)存初始大小16
2.LinkedHashMap
有序,支持存儲(chǔ)鍵值均為null
HashTable
線程安全,存儲(chǔ)鍵值不能為null,有contains方法,內(nèi)存初始大小11