集合分为二大类:一类是单列集合,一类是双列集合。
单列集合:
*------根接口Collection
*------------|List 如何是实现List接口的集合类,具备的特点:有序,可重复。
*----------------|ArrayList ArrayList 底层是使用Objcet 数据实现的,特点:查询熟读快,增删慢。(原因:因为ArrayList底层是数组实现的,根据下标查询不需要比较,查询方式为,首地址+(元素长度*下标),基于这个位置读取相应的字节数就可以了,所以非常快;增删会带来元素的移动,增加数据会向后移动,删除数据会向前移动,所以影响效率。)
*----------|LinkedList LinkedList 是使用链表数据结构实现的。特点: 查询慢,增删快。
*----------|Vector vector 底层使用Objcet数组实现的,实现原理与ArrayList一致,但是是线程安全的,操作效率低。
*------|Set 实现Set接口的集合类,特点:无须,不可重复
*--------|hashSet 底层使用了哈希表实现的,特点存取速度快。
*
* hashSet 存储原理:
* 1.往hashSet 添加元素的时候,首先会调用元素的hashCode
* 方法得到与元素的哈希码值,然后把哈希码值经过运算算出改元素存在在哈希表中的位置。
*
* 情况1:如果算出的位置还没有存在任何元素,那么该元素可以直接添加到哈希表中。
*
* 情况2:如果算出的位置,已经有数据存在,那么还会调用元素的equest方法在与这个位置上的元素进行比较一次。
* 如果Equals 方法返回的是ture ,那么该元素被视为重复元素,不允许添加。如果equals 方法返回的是False ,
* 那么该元素也可被添加。
*
*--------|TreeSet 底层是使用二叉树数据结构实现的。特点对集合元素进行排序存储。
*
* TreeSet注意事项:
* 1.往TreeSet 添加元素的时候,如果元素具备自然顺序的特点,那么TreeSet会根据元素的自然顺序特性进行排序存储。
* 2.往TreeSet 添加元素的时候,如果元素不具备自然顺序的特点,
* 那么元素所属的类就必须要实现Comparable接口,把比较规则定义在compareTo方法上。
* 3.往TreeSet 添加元素的时候,如果元素不具备自然顺序的特点,那么元素所属的类也没有实现Comparable接口,
* 那么在创建TreeSet 对象的时候必须要传入比较器对象。
*
* 比较器的定义格式:
*
* class 类名 implements comparator{
*
*
* }
* 双列集合:
* ------|Map 存储的数据都是以键值对形势存在的,键不可以重复,值可以重复。
* --------|HashMap 底层也是使用了哈希表实现的。
* --------|TreeMap 底层也是使用了二叉树数据结构实现的。
*
*
* @author SXL
*
*/
package com.tgb.list;
import java.util.HashSet;
class person{
int id;
String name;
public person(int id, String name){
super();
this.id=id;
this.name=name;
}
@Override
public int hashCode() {
return this.id;
}
@Override
public boolean equals(Object obj) {
person p=(person)obj;
return this.id==p.id;
}
@Override
public String toString(){
return "编号:"+this.id+"姓名:"+this.name;
}
}
public class demo1 {
public static void main(String[] args){
HashSet<person> set =new HashSet<person>();
set.add(new person(110,"狗娃"));
set.add(new person(110,"狗娃"));
set.add(new person(110,"狗娃"));
System.out.println("集合元素:"+set);
}
}
遍历方式
package com.tgb.list;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map.Entry;
import java.util.Set;
public class demo2 {
/**
* @param args
*/
public static void main(String[] args){
ArrayList<String> list=new ArrayList<String>();
//使用get方法
list.add("张三");
list.add("王五");
list.add("赵六");
System.out.println("======get方法======");
for(int i=0; i<list.size();i++){
System.out.print(list.get(i)+",");
}
//使用迭代器 注意:迭代器在迭代过程中,
//不能使用集合对象修改集合中的元素个数,如果需要修改要使用迭代器的方法进行修改。
System.out.println("\r\n======迭代器方法======");
HashSet<String> set =new HashSet<String >();
set.add("狗娃");
set.add("狗胜");
set.add("铁蛋");
// Iterator<String> it=set.iterator();
// while(it.hasNext()){
//
// System.out.print(it.next()+",");
// }
for(String item:set){
System.out.print(item+",");
}
//map集合
System.out.println("\r\n======entrySet遍历方式======");
HashMap<String,String> map =new HashMap<String,String>();
map.put("zs", "001");
map.put("ls", "002");
map.put("ww", "003");
// 使用entrySet方法
Set<Entry<String,String>>entrys=map.entrySet();
for(Entry<String,String> entry:entrys){
System.out.println("键:"+entry.getKey()+"值:"+entry.getValue());
}
}
}
单列集合:
*------根接口Collection
*------------|List 如何是实现List接口的集合类,具备的特点:有序,可重复。
*----------------|ArrayList ArrayList 底层是使用Objcet 数据实现的,特点:查询熟读快,增删慢。(原因:因为ArrayList底层是数组实现的,根据下标查询不需要比较,查询方式为,首地址+(元素长度*下标),基于这个位置读取相应的字节数就可以了,所以非常快;增删会带来元素的移动,增加数据会向后移动,删除数据会向前移动,所以影响效率。)
*----------|LinkedList LinkedList 是使用链表数据结构实现的。特点: 查询慢,增删快。
*----------|Vector vector 底层使用Objcet数组实现的,实现原理与ArrayList一致,但是是线程安全的,操作效率低。
*------|Set 实现Set接口的集合类,特点:无须,不可重复
*--------|hashSet 底层使用了哈希表实现的,特点存取速度快。
*
* hashSet 存储原理:
* 1.往hashSet 添加元素的时候,首先会调用元素的hashCode
* 方法得到与元素的哈希码值,然后把哈希码值经过运算算出改元素存在在哈希表中的位置。
*
* 情况1:如果算出的位置还没有存在任何元素,那么该元素可以直接添加到哈希表中。
*
* 情况2:如果算出的位置,已经有数据存在,那么还会调用元素的equest方法在与这个位置上的元素进行比较一次。
* 如果Equals 方法返回的是ture ,那么该元素被视为重复元素,不允许添加。如果equals 方法返回的是False ,
* 那么该元素也可被添加。
*
*--------|TreeSet 底层是使用二叉树数据结构实现的。特点对集合元素进行排序存储。
*
* TreeSet注意事项:
* 1.往TreeSet 添加元素的时候,如果元素具备自然顺序的特点,那么TreeSet会根据元素的自然顺序特性进行排序存储。
* 2.往TreeSet 添加元素的时候,如果元素不具备自然顺序的特点,
* 那么元素所属的类就必须要实现Comparable接口,把比较规则定义在compareTo方法上。
* 3.往TreeSet 添加元素的时候,如果元素不具备自然顺序的特点,那么元素所属的类也没有实现Comparable接口,
* 那么在创建TreeSet 对象的时候必须要传入比较器对象。
*
* 比较器的定义格式:
*
* class 类名 implements comparator{
*
*
* }
* 双列集合:
* ------|Map 存储的数据都是以键值对形势存在的,键不可以重复,值可以重复。
* --------|HashMap 底层也是使用了哈希表实现的。
* --------|TreeMap 底层也是使用了二叉树数据结构实现的。
*
*
* @author SXL
*
*/
package com.tgb.list;
import java.util.HashSet;
class person{
int id;
String name;
public person(int id, String name){
super();
this.id=id;
this.name=name;
}
@Override
public int hashCode() {
return this.id;
}
@Override
public boolean equals(Object obj) {
person p=(person)obj;
return this.id==p.id;
}
@Override
public String toString(){
return "编号:"+this.id+"姓名:"+this.name;
}
}
public class demo1 {
public static void main(String[] args){
HashSet<person> set =new HashSet<person>();
set.add(new person(110,"狗娃"));
set.add(new person(110,"狗娃"));
set.add(new person(110,"狗娃"));
System.out.println("集合元素:"+set);
}
}
遍历方式
package com.tgb.list;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map.Entry;
import java.util.Set;
public class demo2 {
/**
* @param args
*/
public static void main(String[] args){
ArrayList<String> list=new ArrayList<String>();
//使用get方法
list.add("张三");
list.add("王五");
list.add("赵六");
System.out.println("======get方法======");
for(int i=0; i<list.size();i++){
System.out.print(list.get(i)+",");
}
//使用迭代器 注意:迭代器在迭代过程中,
//不能使用集合对象修改集合中的元素个数,如果需要修改要使用迭代器的方法进行修改。
System.out.println("\r\n======迭代器方法======");
HashSet<String> set =new HashSet<String >();
set.add("狗娃");
set.add("狗胜");
set.add("铁蛋");
// Iterator<String> it=set.iterator();
// while(it.hasNext()){
//
// System.out.print(it.next()+",");
// }
for(String item:set){
System.out.print(item+",");
}
//map集合
System.out.println("\r\n======entrySet遍历方式======");
HashMap<String,String> map =new HashMap<String,String>();
map.put("zs", "001");
map.put("ls", "002");
map.put("ww", "003");
// 使用entrySet方法
Set<Entry<String,String>>entrys=map.entrySet();
for(Entry<String,String> entry:entrys){
System.out.println("键:"+entry.getKey()+"值:"+entry.getValue());
}
}
}