集合

来源:互联网 发布:国产单片机品牌 编辑:程序博客网 时间:2024/05/17 08:27
集合分为二大类:一类是单列集合,一类是双列集合。




单列集合:
*------根接口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());


}
}



}















































0 0