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);
}
}
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);
}
}