------- android培训、java培训、期待与您交流! ----------
1.Map集合:该集合存储键值对,一对一往里面存,保证键的唯一性。
常用操作:
(1)添加:put(K key,V value);putAll(Map<? extends K,? extends V> m)
(2)删除:clear();remove(Object key)
(3)判断:containsValue(Object value);containsKey(Object key);isEmpty()
(4)获取:get(Object key);size();values();entrySet();keySet()
Map集合框架:
Hashtable:底层是哈希表数据结构,不可存入null键null值,线程同步,jdk1.0效率低。
HashMap:底层是哈希表数据结构,允许使用null键null值,线程不同步,将Hashtable取代,jdk1.2效率高
TreeMap:底层是二叉树数据结构,线程不同步,可以用于给Map集合中的键进行排序。
2.Map集合的两种取出方式:
(1)Set<k> keySet:将Map中所有的键存入的Set集合中,因为set具备迭代器,可以用迭代方式取出所有键,在根据get方法获取每一个键对应的值。
Map<String,String> map = new HashMap<String,String>();
//先获取map集合的所有键的Set集合,keySet();
Set<String> keySet = map.keySet();
//有了Set集合。就可以获取其迭代器。
Iterator<String> it = keySet.iterator();
while(it.hasNext())
{
<span style="white-space:pre"> </span>String key = it.next();
<span style="white-space:pre"> </span>//有了键可以通过map集合的get方法获取其对应的值。
<span style="white-space:pre"> </span>String value = map.get(key);
<span style="white-space:pre"> </span>System.out.println("key:"+key+",value:"+value);
}
(2)Set<Map.Entry<key,v>> entrySet:将Map集合中的映射关系存入到Set集合中,这个关系的数据类型就是Map.Entry。Entry其实就是Map中的一个static内部接口,关系属于Map集合中的一个内部事物,可以直接访问Map集合中的元素。
Map<String,String> map = new HashMap<String,String>();
//将Map集合中的映射关系取出。存入到Set集合中。
Set<Map.Entry<String,String>> entrySet = map.entrySet();
Iterator<Map.Entry<String,String>> it = entrySet.iterator();
while(it.hasNext())
{
<span style="white-space:pre"> </span>Map.Entry<String,String> me = it.next();
<span style="white-space:pre"> </span>String key = me.getKey();//获取键
<span style="white-space:pre"> </span>String value = me.getValue();//获取值
<span style="white-space:pre"> </span>System.out.println(key+":"+value);
}
3.TreeMap练习:对学生对象的年龄进行升序排序
import java.util.Comparator;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
public class MapTest {
/**
* 每一个学生都有对应的归属地。
* 学生Student,地址String。
* 学生属性:姓名,年龄。
* 注意:姓名和年龄相同的视为同一个学生,保证学生的唯一性。
* 对学生对象的年龄进行升序排序。
* 因为数据是以键值对形式存在的,所以要使用可以排序的Map集合。TreeMap。
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
TreeMap<Student,String> tm=new TreeMap<Student,String>(new StuNameComparator());//TreeMap类传入新的比较方法
tm.put(new Student("blisi3",23),"nanjing");
tm.put(new Student("lisi1",21),"beijing");
tm.put(new Student("alisi4",24),"wuhan");
tm.put(new Student("lisi1",21),"tianjin");
tm.put(new Student("lisi2",20),"shanghai");
//将Map集合中的映射关系取出。存入到Set集合中。
Set<Map.Entry<Student,String>> entrySet=tm.entrySet();
//迭代
Iterator<Map.Entry<Student,String>> it=entrySet.iterator();
while(it.hasNext())
{
Map.Entry<Student, String> me=it.next();
Student stu=me.getKey();//获取键
String addr=me.getValue();//获取值
System.out.println(stu+":::"+addr);
}
}
}
class Student implements Comparable<Student>{//学生类实现Comparable接口
private String name;
private int age;
Student(String name,int age)
{
this.name=name;
this.age=age;
}
public int compareTo(Student s)//覆盖compareTo方法
{
int num=new Integer(this.age).compareTo(new Integer(s.age));//年龄进行比较
if(num==0)
return this.name.compareTo(s.name);//姓名字符串进行自然顺序的比较(次要)
return num;
}
public int hashCode()//覆盖hashCode方法
{
return name.hashCode()+age*34;
}
public boolean equals(Object obj)//覆盖equals方法
{
if(!(obj instanceof Student))
throw new ClassCastException("类型不匹配");
Student s=(Student)obj;
return this.name.equals(s.name)&&this.age==s.age;//姓名和年龄都相同才为真
}
public String getName()
{
return name;
}
public int getAge()
{
return age;
}
public String toString()
{
return name+":"+age;
}
}
class StuNameComparator implements Comparator<Student>{//定义比较器
public int compare(Student s1,Student s2)
{
int num=s1.getName().compareTo(s2.getName());
if(num==0)
return new Integer(s1.getAge()).compareTo(new Integer(s2.getAge()));
return num;
}
}
4.Arrays:用于操作数组的工具类,里面都是静态方法。
asList:将数组变成集合。可以使用集合的思想和方法来操作数组中的元素,不可以使用集合的增删方法,因为数组的长度是固定的。
Integer[] num={2,3,4};List<Integer> li=Arrays.asList();
如果数组中的元素都是对象。那么变成集合时,数组中的元素就直接转成集合中的元素;如果数组中的元素都是基本数据类型,那么会将该数组作为集合中的元素存在。
5.Collections:集合框架的工具类,里面都是静态方法。
Collections和Collection区别:
Collection是集合框架中的一个顶层接口,它里面定义了单列集合的共性方法。
Collections是集合框架中的一个工具类。该类中的方法都是静态的,提供的方法中有可以对list集合进行排序,二分查找等方法。
Collections.sort(List<> List):根据元素的自然顺序对指定列表进行升序排序
Collections.replaceAll(old,new):替换所有
Collections.reverse(List<> list):反转
Collections.swap(List<> list,int i,int j):交换位置
6.高级for循环
格式(数据类型 变量名:被遍历的集合或数组)
{}
对集合进行遍历,只能获取集合的元素,不能对集合进行操作。
高级for循环必须有被遍历的目标。
ArrayList<String> al = new ArrayList<String>();
al.add("abc");
al.add("aaa");
for(String s : al)
{
System.out.println(s);
}