单列集合
···collection 单例集合的根接口
1.list如果是实现了list接口的集合类,具备特点:有序,可重复
————-1.1 ArrayList ArrayList 底层是使用Object数组实现的,特点:查询速度快,增删慢
————-1.2 LinkedList LinkedList 底层是使用了链表数据结构实现的,特点:查询速度慢,增删快
————-1.3 Vector底层是使用了Object数组实现的,实现原理和ArrayList是一致的,但是是线程安全的,操作效率低
//List.java
package day01jihe;
import java.util.ArrayList;
public class List {
public static void main(String args[]){
ArrayList<Person> list = new ArrayList<Person>();
list.add(new Person(001,"张"));
list.add(new Person(001,"张"));
list.add(new Person(002,"兵"));
list.add(new Person(003,"杰"));
System.out.println("=======list的foreach======");
for (Person person : list) {
System.out.println("id= "+person.getId()+",name="+person.getName());
}
}
}
2.set 如果是实现了set接口的集合类,具备特点:无序,不可重复
————-2.1 HashSet底层是使用了哈希表实现的,特点:存取速度快
补充:HashSet存储元素的原理:往HashSet添加元素时候,首先调用元素的hashCode方法得到元素的哈希代码,然后通过运算算出钙元素存在哈希表中的位置。重写hashCode,equals两个方法。
情况1:如果算出的位置目前还没有元素,则直接添加至哈希表
情况2:如果有元素,则用equals方法进行元素比较, 如果equals方法返回true,name钙元素为重复元素,不许添加,若false,则可以添加
————-2.2 TreeSet底层是使用的二叉树数据结构实现的,特点:对集合中的元素进行排序存储
//Person.java===== list.java中也用到**
package day01jihe;
public class Person {
int id;
String name;
public Person(int id, String name) {
super();
this.id = id;
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Person [id=" + id + ", name=" + name + "]";
}
@Override
public int hashCode() {
return this.id;
}
@Override
public boolean equals(Object obj) {
Person p = (Person)obj;
return this.id == p.id;
}
}
//Set.java
package day01jihe;
import java.util.HashSet;
import java.util.Iterator;
public class Set {
public static void main(String args[]){
HashSet<Person> set = new HashSet<Person>();
set.add(new Person(001,"张"));
set.add(new Person(001,"张"));
set.add(new Person(002,"兵"));
set.add(new Person(003,"杰"));
System.out.println("=====Set直接获取======");
System.out.println("集合的元素"+set);
System.out.println("=====Set迭代器方式遍历======");
//迭代器在迭代的过程中,不能使用几何对象修改集合中的元素个数,如果需要修改,需要使用迭代器的方法进行修改
Iterator<Person> it = set.iterator();//获取到迭代器
while(it.hasNext()){
System.out.println(it.next()+",");
}
System.out.println("=====Set的foreach方式遍历======");
for (Person person : set) {
System.out.println(person+",");
//set.add(new Person(004,"la"));报错,因为在迭代过程中修改元素个数
}
}
}
双列集合
3.Map 存储的数值都是以键值对形式存在,键不可以重复,值可以重复
————-3.1 HashMap 底层使用哈希表实现
————-3.2 TreeMap 底层是用二叉树实现
//Map.java
package day01jihe;
import java.util.HashMap;
import java.util.Map.Entry;
import java.util.Set;
public class Map {
public static void main(String args[]){
HashMap<String,String> map = new HashMap<String,String>();
map.put("张", "001");
map.put("兵", "002");
map.put("杰", "003");
Set<Entry<String,String>> entrys = map.entrySet(); //将map转为set
for (Entry<String,String> entry : entrys) {
System.out.println("key="+entry.getKey()+"value="+entry.getValue());
}
}
}