您的位置:首页 > 职场人生

黑马程序员 JAVA基础-集合框架(二)

2015-03-04 10:43 489 查看
 
----------android培训java培训、java学习型技术博客、期待与您交流!------------

 在此,分享一下自己学习JAVA的学习心得。有不对的地方请帮忙改正,也希望对想学java的同学有帮助!

JAVA基础

        —集合框架(Map)

一、Map的概述

Map集合的特点:

   1.使用Key(键),Value(值)对的形式存储;

   2.内部会维护Key的唯一性。不管值是什么情况;

   

   

   Map接口中的一些方法:下面方法中的K和V:K:Key(键)(Object)

                              V:Value(值)(Object)

   1).添加功能:

    V put(K key,V value):将指定的值与此映射中的指定键关联(可选操作)。

   2).删除功能:

    V remove(Object key):如果存在一个键的映射关系,则将其从此映射中移除(可选操作)。

void clear():清空集合:

   3).获取功能:

    int size():返回此映射中的键-值映射关系数。

    V get(Object key):返回指定键所映射的值;如果此映射不包含该键的映射关系,则返回 null。

    Set<K> keySet():返回此映射中包含的键的 Set 视图。

    Collection<V> values():返回此映射中包含的值的 Collection 视图。

    Set<Map.Entry<K,V>> entrySet():返回此映射中包含的映射关系的 Set 视图。

   4).判断功能:

    boolean containsKey(Object key):如果此映射包含指定键的映射关系,则返回 true。

    boolean containsValue(Object value):如果此映射将一个或多个键映射到指定值,则返回 true。

    boolean isEmpty():判断Map是否为空;
Java练习代码:
练习(一):使用Map集合的keySet遍历集合
public class Demo {
public static void main(String[] args) {
HashMap<String,String> map = new HashMap<String,String>();
map.put("it001", "张三");
map.put("it002", "李四");
map.put("it003", "王五");

Set<String> keySet = map.keySet();
/*Iterator<String> it = keySet.iterator();
while(it.hasNext()){
String k = it.next();
String v = map.get(k);
System.out.println(k + "--" + v);
}*/
//增强for
for(String s : keySet){
System.out.println("键名:" + s + " 值:" + map.get(s));
}
}
}    练习(二):使用entrySet()遍历集合
public class Demo {
public static void main(String[] args) {
HashMap<String,String> map = new HashMap<String,String>();
map.put("it001", "张三");
map.put("it002", "李四");
map.put("it003", "王五");

//获取键值对对象
Set<Map.Entry<String,String>> entrySet = map.entrySet();

for(Map.Entry<String,String> s : entrySet){
String k = s.getKey();
String v = s.getValue();
System.out.println(k + "--" + v);
}
}
}

   HashMap和Hashtable的区别:
  
   1)、HashMap:所属Map接口;基于哈希表实现;
   
 允许使用null键和null值
  
不保证线程安全,效率高
   
 从JDK1.2开始
   
   2)、Hashtable:所属Map接口;基于哈希表实现;
          不允许使用null做键或值
          线程安全的,效率低;
          从JDK1.0开始
HashMap案例:
HashMap<String,String>
HashMap<Integer,String>
HashMap<String,Student>
HashMap<Student,String>
     Java练习代码:
练习:HashMap<Student,String>
main方法:
public class Demo {
public static void main(String[] args) {
HashMap<Student,String> map = new HashMap<Student,String>();

Student stu1 = new Student("张三",22);
Student stu2 = new Student("李四",23);
Student stu3 = new Student("王五",34);

//填充map
map.put(stu1, "it001");
map.put(stu2, "it002");
map.put(stu3, "it003");
//键名不能重复
//测试一:存储一个重复的引用
// Student stu4 = stu3;
// map.put(stu4, "it004");
//测试二:存储一个新的对象,但里面的值是一样的;
Student stu4 = new Student("王五",34);
//重写hashCode()和equals()方法后,下面的键将不能存入,新值会替换原值;
// map.put(stu4, "it004");//默认是可以存进去的。原因是没有重写Student的hashCode()和equals()方法
//遍历
Set<Student> keySet = map.keySet();
for(Student stu : keySet){
System.out.println("键:" + stu.getName() + "," + stu.getAge() +
" 值:" + map.get(stu));
}
}
}

     Student类:
public class Student implements Comparable{
private String name;
private int age;
public Student(String name, int age) {
super();
this.name = name;
this.age = 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) {
Student stu = (Student)o;
//按年龄
int num = this.age - stu.getAge();
return num;
}
}

    LinkedHashMap类:Map 接口的哈希表和链接列表实现,具有可预知的迭代顺序。
TreeMap:底层是二叉树数据结构。线程不同步。可以用于给map集合中的键进行排序。

Java练习代码:
练习:"aababcabcdabcde",获取字符串中每一个字母出现的次数要求结果:a(5)b(4)c(3)d(2)e(1)
public class Demo {
public static void main(String[] args) {
String str = "aababcabcdabcde";
TreeMap<String,Integer> map = new TreeMap<>();
//遍历字符串
for(int i = 0;i < str.length() ; i++){
char c = str.charAt(i);
//先从集合中get,用当前的字符作为键。
Integer v = map.get(String.valueOf(c));
//判断v是否为null,如果为null,添加到集合;否则将v加1,之后再存入集合
if(v == null){
//新增
map.put(String.valueOf(c), 1);
}else{
//将值加1,再存入集合
map.put(String.valueOf(c), ++v);
}
}
//封装字符串
StringBuffer buf = new StringBuffer();
Set<String> keySet = map.keySet();
for(String s : keySet){
buf.append(s);
buf.append("(");
buf.append(map.get(s));
buf.append(")");
}
System.out.println(buf.toString());
}
}

Collections类概述:
   
   此类完全由在 collection 上进行操作或返回 collection 的静态方法组成。
   
   
public static <T> void sort(List<T> list):排序(根据元素的自然顺序 对指定列表按升序进行排序)
public static <T> int binarySearch(List<?> list,T key):在list中查找key对象
public static <T> T max(Collection<?> coll):根据元素的自然顺序,返回给定 collection 的最大元素。
public static void reverse(List<?> list):反转指定列表中元素的顺序。
public static void shuffle(List<?> list):使用默认随机源对指定列表进行置换。所有置换发生的可能性都是大致相等的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息