简述list,set,map集合


list接口继承了collection,因此包含connection的所有方法

list常用的实现类有Array List和LinkedList

ArrayList类实现了可变的数组,允许保存所有元素,包括null,并可以根据索引位置对集合进行快速的随机访问,但是,它的缺点是向指定的索引位置插入对象或删除对象的速度较慢。

LinkedList类采用链表结构保存对象,这种结构的优点是便于向集合中插入和删除对象,需要向集合中插入,删除对象时,使用LinkedList类实现的list集合效率较高,但是对于随机访问List的对象,使用Linked List类实现的list集合效率较低。

List<E>list=new List<>();           //实例化list集合

 

import java.util.*;
public class Gather
{
	public static void main(String[] args)
	{
		List<String>list=new ArrayList<>();
		list.add("a");
		list.add("b");
		list.add("c");
		int i=(int)(Math.random()*(list.size()-1));
		System.out.print(list.get(i)+"    ");
		list.remove(2);
		for(int j=0;j<list.size();j++)
		{
			System.out.print(list.get(j));
		}
	}
}

set继承connection,因此也包含connection接口的所有方法,set的构造方法中有一个约束条件,传入的connection的对象不能有重复值。

set接口常用的实现类有Hashset和Treeset

Hashset类实现set接口,由哈希表实现(实际上是一个Hashmap实例)支持,它不保证set的迭代顺序,特别是它不保证该顺序不变,允许使用null。

Treeset类不仅实现set接口,还实现java,util,sortedset接口,因此,Tree set类实现的set集合在遍历集合时按照自然顺序递增排序,也可以按照比较器递增排序,即可以通过比较器对用Tree set类实现的set集合中的对象进行排序。

import java.util.*;
public class Update implements Comparable<Object>
{
	String name;
	long id;
	public Update (String name,long id)
	{
		this.name=name;
		this.id=id;
	}
	public int compareTo(Object o)
	{
		Update upstu=(Update)o;
		int result=id>upstu.id?1:(id==upstu.id?0:-1);       //让集合的排列有一个顺序
		return result;
	}
	  public String getName() {
		    return name;
		  }
		 
		  public void setName(String name) {
		    this.name = name;
		  }
		 
		  public long getId() {
		    return id;
		  }
		 
		  public void setId(long id) {
		    this.id =id;
		  }

	public static void main(String[] args)
	{
		Update stu1=new Update("student li",01);
		Update stu2=new Update("student chen",02);
		Update stu3=new Update("student wang",03);
		Update stu4=new Update("student ma",04);
		TreeSet<Update>tree=new TreeSet<Update>();
		tree.add(stu1);
		tree.add(stu2);
		tree.add(stu3);
		tree.add(stu4);
		Iterator<Update>it=tree.iterator();
		System.out.println("set 集合的所有元素");
		while(it.hasNext())
				{
			Update stu=it.next();
			System.out.println(stu.getId()+"  "+stu.getName());
				}
		it=tree.headSet(stu2).iterator();
		System.out.println("截取前面的集合");
		while(it.hasNext())
		{
			Update stu=it.next();
			System.out.println(stu.getId()+"  "+stu.getName());
		}
		it=tree.subSet(stu2,stu3).iterator();
		System.out.println("截取中间部分的集合");
		while(it.hasNext())
		{
			Update stu=it.next();
			System.out.println(stu.getId()+"  "+stu.getName());
		}
		it=tree.tailSet(stu3).iterator();
		System.out.println("截取后面的部分");
		while(it.hasNext())
		{
			Update stu=it.next();
			System.out. println(stu.getId()+"  "+stu.getName());
		}
	}
}

存入treeset类实现的set集合必须实现compareable接口,该接口中的compareTo(objiect o)方法比较此对象与指定对象与对象的顺序。如果该对象小于,等于或大于指定对象,则分别返回负整数,0或正整数。

headSet(),subSet(),tailSet():如果指定参数位于起始位置,则包含该对象。如果位于终止位置,则不包含该参数。



map集合没有继承connection接口,其提供的是key和value的映射,map中不能包含相同的key,每个key只能映射一个value。key还决定存储对象在映射中的存储位置,但不是由key本身决定的,而是通过一种散列技术进行处理,产生一个散列码的整数值,散列码通常用作一个偏移量,该偏移量对应分配给映射的内存区域的起始位置,从而确定存储对象在映射中的起止位置。

map接口常用的实现类有HashMap和TreeMap,Hash Map类实现的map集合添加或删除映射关系时效率更高。HashMap是基于哈希表的map接口的实现,HashMap通过哈希码对其内部的映射关系进行快速访问,而TreeMap中的映射关系存在一定的顺序,如果希望map集合中的对象也存在一定的顺序,应该使用Treemap类实现map集合

如果Hashmap类创建map集合,当需要顺序输出时,再创建一个完成相同映射关系的Treemap类实例

import java.util.*;
public class MyMap 
{
	public static void main(String[] args)
	{
		Map<String,String>map=new HashMap<>();
		Emp emp1=new Emp("a","李思思");
		Emp emp2=new Emp("h","王毅");
		Emp emp3=new Emp("c","李四");
		map.put(emp1.getE_Id(),emp1.getE_Name());
		map.put(emp2.getE_Id(),emp2.getE_Name());
		map.put(emp3.getE_Id(),emp3.getE_Name());
		Set<String>set=map.keySet();                   //获取map集合中的key对象集合
		Iterator<String>it=set.iterator();
		System.out.println("hashmap类实现的map集合");
		while(it.hasNext())
		{
			String str=(String)it.next();
			String name=(String)map.get(str);
			System.out.println(str+"  "+name);
		}
		TreeMap<String,String>treemap=new TreeMap<String,String>();
		treemap.putAll(map);
		Iterator<String>iter=treemap.keySet().iterator();
		System.out.println("tree类实现的map集合,键对象升序");
		while(iter.hasNext())
		{
			String str=(String)iter.next();
			String name=(String)treemap.get(str);
			System.out.println(str+"  "+name);
		}
	}
}


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值