HashSet 和 TreeSet 及 Map 集合的简单方法,含程序。

HashSet 是一个什么样的容器呢?

在给HashSet容器对象添加元素时,利用散列函数。是无序的,不能添加相同元素的。

package Set;

import java.util.HashSet;
import java.util.Iterator;

import ArrayList.Person;

public class HashSetDemo {

	/**
	 * HashSet  特点:元素唯一。无序的。
	 */
	public static void main(String[] args) {
		HashSet hash = new HashSet();
		hash.add(new Person("one",21));
		hash.add(new Person("two",22));
		hash.add(new Person("three",23));
		hash.add(new Person("four",24));
		hash.add(new Person("four",24));
		Iterator it = hash.iterator();
		System.out.println(hash);
		while(it.hasNext()){
//			System.out.println("name"+((Person) it.next()).getName()+"    age"+((Person) it.next()).getAge());
			Person p = (Person) it.next();System.out.println("name > "+p.getName()+"   age "+p.getAge());
		}
	}

}

 

 

==============================================================================================================================

TreeSet 是一个什么样的容器呢?

在给TreeSet容器添加对象的时候,改容器会自动给添加的元素排序。在排序过程中,判断比较函数的比较结果,如果比较函数返回0,说明两个元素相等。不存。

如果该对象自身实现了Comparable接口的comparableTo()方法。着利用之。否则需要在该元素类中实现Comparable的comparableTo()方法。再利用该方法进行比较,排序。如果想自定义排序方法。可以写一个比较类。在创建TreeSet对象时,传入该比较类对象即可。如:TreeSet ts = new TreeSet(new CompartorByname());

package Set;

import java.util.Iterator;
import java.util.TreeSet;

import ArrayList.Person;

public class TreeSetDemo {

	/**
	 * TreeSet 继承 Set
	 * TreeSet在输入的过程中对元素按照指定顺序进行了排序。
	 * 如果对象没有比较方法,需要实现Comparable接口的compareableTo()方法。
	 * 在排序过程中,判断比较函数的比较结果,如果比较函数返回0,说明两个元素相等。不存。
	 * 
	 */
	public static void main(String[] args) {
		TreeSet ts = new TreeSet(new CompartorByname());
		ts.add(new Person("zhangsan",19));
		ts.add(new Person("lisi",28));
		ts.add(new Person("lisi1",18));
		ts.add(new Person("wangwu",20));
		ts.add(new Person("zhaoliu",26));
//		demo1();
		Iterator it = ts.iterator();
		while(it.hasNext())
		{
			System.out.println(it.next());
		}
	}

	private static void demo1() {
		TreeSet ts = new TreeSet();
		ts.add("one");
		ts.add("two");
		ts.add("three");
		ts.add("four");
		Iterator it = ts.iterator();
		while(it.hasNext())
		{
			System.out.println(it.next());
		}
	}
	

}


 

package Set;

import java.util.Comparator;

import ArrayList.Person;

public class CompartorByname implements Comparator {

	@Override
	/**
	 * 当对象没有比较器时,或者不想用对象的比较器,可以自己创建比较器,创建时需要实现Compartor中的compare方法。
	 * 并且在创建TreeSet时传入该比较器。
	 * 创建一个Person 类的根据姓名的比较器
	 */
	public int compare(Object o1, Object o2) {
		Person p1 = (Person)o1;
		Person p2 = (Person)o2;
		int temp = p1.getName().compareTo(p2.getName());
		return	temp == 0 ? p1.getAge()-p2.getAge():temp;

	}
}


 

 

=================================================================

Map的基本方法演示。

接口 Map:一次添加一对元素(键key值value对,Map中键必须唯一)。主要用到了Map的实现类HashMap。

package Map;

import java.util.HashMap;
import java.util.Map;

public class MapDemo {

	/**
	 * 接口 Map:一次添加一对元素(键key值value对,Map中键必须唯一)。Collection 一次添加一个元素。
	 * Map 也成双列集合,Collection为单列集合。
	 * 
	 * 常用方法
	 * 1,添加
	 * value	put(key,value);//返回以前与key相关联的值。
	 * 2,删除
	 * void clear();
	 * value remove(key);根据指定的key删除对应的键值。
	 * 3,判断
	 * boolean containsKey(key);
	 * boolean containsValue(Value);
	 * boolean isEmpty();
	 * 4,获取
	 * value	get(key);//根据key拿值,没有的话 返回null。
	 * int		size();//返回Map中的键值对个数。
	 * 
	 */
	public static void main(String[] args) {
		Map<Integer,String> map = new HashMap<Integer,String>();
		method(map);

	}
	public static void method(Map<Integer,String> map)
	{
		//添加
		map.put(19,"xiaoqiang");
		map.put(16,"zhangsan");
		map.put(4, "zhaoliu");
		map.put(23, "wangcai");
		//删除
//		map.remove(16);
		//判断
//		System.out.println(map.containsKey(4));
		//获得
		System.out.println(map.get(23));
		
		System.out.println(map);
	}

}

二、如何获取Map集合中的元素呢?

方法一: 

通过Map对象的ksySet()方法获得一个Set<E>集合对象(包含了所有的key值,key值唯一,所以用Set集合)。

            格式:Set<E> setobj = mapobj.keySet();

 通过key值可以获得元素的Value值。

在创建迭代器时注意要说明迭代器 类型。

            格式:   Iterator<E>  itobj =  setobj.iterator(); (key的类型)

package Map;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

public class MapDemo2 {

	/**
	 * 通过keySet 获取map中的对象。
	 */
	public static void main(String[] args) {
		//创建Map集合。
		Map<Integer,String> mapobj =new HashMap<Integer,String>();
		//添加map元素。
		mapobj.put(19,"xiaoqiang");
		mapobj.put(16,"zhangsan");
		mapobj.put(4, "zhaoliu");
		mapobj.put(23, "wangcai");
		//通过map的keyset方法 ,获取键值Set集合。
		Set<Integer> key_set = mapobj.keySet();
		//创建迭代器
		 Iterator<Integer> itobj = key_set.iterator();
		 while(itobj.hasNext())
		 {
			 Integer key = itobj.next();
			 String value = mapobj.get(key);
			 System.out.println(key+">>>>"+value);
		 }
	}

}
打印结果:
16>>>>zhangsan
19>>>>xiaoqiang
4>>>>zhaoliu
23>>>>wangcai

方法二:通过.entrySet() 获取map中的对象。

Map.Entry<K,V>为Map的内部嵌套接口类,主要方法 K getKey(); V   getValue();

通过mapobj的entrySet()方法 返回一个Set<Map.Entry<K,V>>集合类型。

格式:Set<Map.Entry<K,V>> setobj = mapobj.enterySet();

在创建<Map.Entry<K,V>>类型的迭代器

格式:Iterator<Map.Entry<K,V>> itobj = setobj.iterator();

在迭代过程中,创建Map.Entry<K,V>的接口对象来接受 itobj.next();

再通过 getKey();getValue();获得相应的Key、Value。

package Map;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

public class MapDemo3 {

	/**
	 * 通过.EntrySet() 获取map中的对象。
	 */
	public static void main(String[] args) {
		Map<Integer,String> map = new HashMap<Integer,String>();
		method(map);

	}
	public static void method(Map<Integer,String> map)
	{
		//添加
		map.put(19,"xiaoqiang");
		map.put(16,"zhangsan");
		map.put(4, "zhaoliu");
		map.put(23, "wangcai");
		//通过Map的entrySet()返回此映射中包含的映射关系的 Set 视图。 	Map.Entry 为Map的内部接口类。 

		Set<Map.Entry<Integer,String>> entryset = map.entrySet();
		//创建Map.<Integer,String>类型的迭代器。
		Iterator<Map.Entry<Integer,String>> it = entryset.iterator();
		while(it.hasNext()){
			//获得Map.Entry<Integer,String>类型对象。
			Map.Entry<Integer,String> mm = it.next();
			//通过Map.Entry<Integer,String>类型对象,获得 key 和 value。
			String value = mm.getValue();
			Integer key = mm.getKey();
			System.out.println(key+"   。。。。 "+value);
			
		}
		
		System.out.println(map);

	}

}

运行结果:

16   。。。。 zhangsan
19   。。。。 xiaoqiang
4   。。。。 zhaoliu
23   。。。。 wangcai
{16=zhangsan, 19=xiaoqiang, 4=zhaoliu, 23=wangcai}


 

三、其他方法。

只获取value值。通过mapobj的values();该方法返回一个Collection集合对象。因为value可以相同。所以不能用Set集合接受。

package Map;

import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

public class MapDemo4 {

	/**
	 * 只获取value值
	 */
	public static void main(String[] args) {
		Map<Integer,String> map = new HashMap<Integer,String>();
		method(map);

	}
	public static void method(Map<Integer,String> map)
	{
		//添加
		map.put(19,"xiaoqiang");
		map.put(16,"zhangsan");
		map.put(4, "wangcai");
		map.put(23, "wangcai");
		Collection<String> values = map.values();
		Iterator<String> it = values.iterator();
		while(it.hasNext()){
			System.out.println(it.next());
		}
	}

}

运行结果:

zhangsan
xiaoqiang
wangcai
wangcai

再赋一个程序:

MapDemo5:

package Set;

import java.util.Comparator;

import ArrayList.Person;

public class CompartorByname implements Comparator {

	@Override
	/**
	 * 当对象没有比较器时,或者不想用对象的比较器,可以自己创建比较器,创建时需要实现Compartor中的compare方法。
	 * 并且在创建TreeSet时传入该比较器。
	 * 创建一个Person 类的根据姓名的比较器
	 */
	public int compare(Object o1, Object o2) {
		Person p1 = (Person)o1;
		Person p2 = (Person)o2;
		int temp = p1.getName().compareTo(p2.getName());
		return	temp == 0 ? p1.getAge()-p2.getAge():temp;

	}
}


Person类程序:

package ArrayList;

public class Person extends Object implements Comparable{
	private String name;
	private int age;
	private Object Person;

	public Person() {
		super();
	}

	public Person(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}

	@Override
	public int hashCode() {

		return name.hashCode() + age;
	}

	@Override
	// public boolean equals(Object obj) {
	// 	Person p = (Person) obj;
	// 	return name.equals(p.name) && age == p.age;
	// }
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (!(obj instanceof Person))
			throw new ClassCastException();
		Person p = (Person) obj;
		return name.equals(p.name) && age == p.age;

	}

	@Override
	public String toString() {

		return this.name + ":" + age;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	@Override
	
	public int compareTo(Object o) {
		Person p = (Person)o;
		if(this.age>p.age)
			return 1;
		if(this.age<p.age)
			return -1;
		
		return  this.name.compareTo(p.name);
	}

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值