集合类是一种工具类,比如作为容器存储数据,大致可以分为List,Set,Map,Queue四种体系:
List代表有序、可重复的集合, Set代表无序、不可重复的集合; Map代表具有映射关系的集合; Queue代表一种队列集合实现(Java5新增的)。 |
常用的实现类:
HashMap、ArrayList、HashSet及次之的LinkedList、TreeSet、ArrayDeque、TreeMap |
常用的方法:增删改查(遍历)
list:arrayList底层采用可变数组,数组扩容时采用新数组拷贝,linkList底层采用双向链表;
package com.stx.test;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class 集合list {
public static void main(String[] args) {
List list = new ArrayList();
List temp = new ArrayList();
list.add("test");// 添加 add 方法
list.add("xp");
// System.out.println(list);
list.remove("test");// 删除指定地元素,让末尾的数组向前移动一位,后面置空,方便GC
// System.out.println(list);
boolean bol = list.contains("xp");// 查询指定地元素
// System.out.println(bol);
list.removeAll(temp);// 用list地元素减去temp的元素
list.retainAll(temp);//list中只剩temp的元素
System.out.println(list);
temp.clear();//删除temp种中的所有元素
list.add("xp");
//向books集合中添加三个元素
list.add(1,"a");
list.add(2,"b");
list.add(3,"c");
//将新字符串对象插入在第二个位置
list.set(2, "bb");
//判断指定元素在List集合中位置:输出1,表明位于第二位
System.out.println(list.indexOf(new String("bb")));
//将第二个元素替换成新的字符串对象
System.out.println(list.subList(1, 2));
//集合遍历
list.forEach(obj->System.out.println(obj));//java8给Iterator接口新增forEach方法
Iterator it = list.iterator();
while(it.hasNext()){
String list1 = (String) it.next();
System.out.println(list1);
}
for (Object object : list) {
String str = (String) object;
System.out.println(object);
}
}
}
set:当向HashSet中存值得时候,HashSet会调用hashCode()方法来获取该对象的hashCode值,然后决定在HashSet中的位置,HashSet判断两个值得相等的标准是equal()值相等且hashCode的值也相等。
package com.stx.test;
import java.util.*;
// 类A的equals方法总是返回true,但没有重写其hashCode()方法
class A {
public boolean equals(Object obj) {
return true;
}
}
// 类B的hashCode()方法总是返回1,但没有重写其equals()方法
class B {
public int hashCode() {
return 1;
}
}
// 类C的hashCode()方法总是返回2,且重写其equals()方法总是返回true
class C {
public int hashCode() {
return 2;
}
public boolean equals(Object obj) {
return true;
}
}
public class 集合set {
public static void main(String[] args) {
HashSet books = new HashSet();
// 分别向books集合中添加两个A对象,两个B对象,两个C对象
books.add(new A());
books.add(new A());
books.add(new B());
books.add(new B());
books.add(new C());
books.add(new C());
System.out.println(books);
}
}
result:
[com.stx.test.B@1, com.stx.test.B@1, com.stx.test.C@2, com.stx.test.A@15db9742, com.stx.test.A@6d06d69c]
HashMap,HashTable:底层使用数组实现,数组中每一项是个单向链表,即数组和链表的结合体
区别:https://mp.csdn.net/postedit/80822538