------- android培训、java培训、期待与您交流! ---------
|-->Set:元素是无序的(存入和取出的顺序不一定一致),元素不可以重复,该集合没有索引
|-->HashSet:底层数据结构式哈希表。
|-->TreeSet:底层数据结构式二叉树。
Set集合的功能和List是一致的
Set之HashSet
底层数据结构式哈希表。允许使用null
被保存到HashSet的元素需要重写equals()和hashCode()方法。根据equals()算出的值作为该元素在HashSet的位置。根据hashCode()方法判断在HashSet中是否有相同的元素
例子:
package com.itheima;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class HashSetDemo {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
HashSet<Student> hs = new HashSet<>();
hs.add(new Student("aaa","aaa"));//添加成员
hs.add(new Student("bbb","bbb"));
hs.add(new Student("aaa","aaa"));
hs.add(new Student("111","222"));
hs.add(new Student("111","222"));
Iterator<Student> it = hs.iterator();//遍历hs
while (it.hasNext()) {
Student s = (Student)it.next();
System.out.println("name :" + s.getName() + " id :"+ s.getId_card());
}
}
}
class Student{
public Student(String name,String id_card) { //Student类构造方法
// TODO Auto-generated constructor stub
this.name = name;
this.id_card = id_card;
}
String name; //get/set方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getId_card() {
return id_card;
}
public void setId_card(String id_card) {
this.id_card = id_card;
}
String id_card;
//覆写object的hashCode()方法
@Override
public int hashCode() {
// TODO Auto-generated method stub
return this.name.hashCode() + this.id_card.hashCode();
}
//覆写object的equals()方法
@Override
public boolean equals(Object obj) {
// TODO Auto-generated method stub
if(!(obj instanceof Student)) //如果不是Student对象,返回false
return false;
Student stu = (Student)obj;
return this.name.equals(stu.name) && this.id_card.equals(stu.id_card);
}
}
Set之TreeSet
底层数据结构式二叉树
被保存到元素TreeSet需要具有比较性(实现compareble接口)或者让TreeSet具备比较性。
compareTo
int compareTo(T o)
- 比较此对象与指定对象的顺序。如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数。
package com.itheima;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;
public class HashSetDemo {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
TreeSet<Student> ts = new TreeSet<>();
ts.add(new Student("aaa","aaa"));
ts.add(new Student("bbb","bbb"));
ts.add(new Student("aaa","aaa"));
ts.add(new Student("111","222"));
ts.add(new Student("111","222"));
Iterator<Student> it = ts.iterator();
while (it.hasNext()) {
Student s = (Student)it.next();
System.out.println("name :" + s.getName() + " id :"+ s.getId_card());
}
}
}
class Student implements Comparable<Object>{
public Student(String name,String id_card) {
// TODO Auto-generated constructor stub
this.name = name;
this.id_card = id_card;
}
String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getId_card() {
return id_card;
}
public void setId_card(String id_card) {
this.id_card = id_card;
}
String id_card;
@Override
//
public int compareTo(Object o) {
// TODO Auto-generated method stub
if(!(o instanceof Student))
throw new RuntimeException();;
Student stu = (Student)o;
if(this.id_card.equals(stu.id_card)){
if(this.name.equals(stu.name))
return 0; //如果name和id都相当。则两对象相同
}
if(!(this.id_card.hashCode() > stu.id_card.hashCode())){
return 1;//比较id的hash值
}
return -1;
}
}
集合框架之map:
Map
|-->Hashtable
底层是HASH表数据结构,不可以存null null,该集合是线程同步的
|-->HashMap
底层是HASH表数据结构,可以存null null,该集合是线程不同步的,效率高
|-->TreeMap
底层是二叉树数据结构,线程不同步,可以用于给map集合中的键进行排序
map集合的特点:
该集合存储键值对,保证键的唯一
Map<String, String> map = new HashMap<>();
1.添加
public V put(K key, V value)
- 在此映射中关联指定值与指定键。如果该映射以前包含了一个该键的映射关系,则旧值被替换。
2.删除
public void clear()
- 从此映射中移除所有映射关系。此调用返回后,映射将为空。
public V remove(Object key)
- 从此映射中移除指定键的映射关系(如果存在)。
3.判断
public boolean containsKey(Object key)
- 如果此映射包含对于指定键的映射关系,则返回 true。
public boolean containsValue(Object value)
- 如果此映射将一个或多个键映射到指定值,则返回 true。
public boolean isEmpty()
- 如果此映射不包含键-值映射关系,则返回 true。
4.获取
public V get(Object key)
-
返回指定键所映射的值;如果对于该键来说,此映射不包含任何映射关系,则返回
null
。
public Set<K> keySet()//获取key的集合
public Set<Map.Entry<K,V>> entrySet()获取key value的映射
遍历MAP的两种方式
1:
//先获取map集合中的所有键的set集合
Set<String> al = map.keySet();
Iterator<String> it = al.iterator();
while (it.hasNext()) {
String s = it.next();
System.out.println(map.get(s));
}
2:
//将映射关系取出
Set<Map.Entry<String, String>> entries = map.entrySet();
Iterator<Map.Entry<String, String>> it2 = entries.iterator();
while (it2.hasNext()) {
Map.Entry<String, String> me = it2.next();
System.out.println(me.getValue());
}