本章主要来讲HashMap、HashTable和treemap

HashMap"示例.
package Z.Kbzl.jihe;
import java.util.HashMap;
import java.util.Map;
public class MapDemo{
public static void main(String[] args) {
Map map=new HashMap();//数据格式--key----》value
//put 给map中存放数据,key一般使用String类型,但是对类型没有要求
map.put("name", "张三");
map.put("age", "18");
map.put("score", "80");
map.put(1, 100);
System.out.println(map.get(1));
//取数据 get(key)
//map.clear();//清空map集合中的数据
//map.remove("name");//根据key删除数据
//删除数据后,如果根据key取不到值的话,返回null
//System.out.println(map.get("name"));//打印name值
//修改数据:因为在map中要求key必须唯一,如果添加相同的key,则会覆盖以前的值
map.put("name", "李四");//覆盖以前的值
System.out.println(map.get("name"));
//获取map中所有的key
System.out.println(map.keySet());
//获取map中所有的value
System.out.println(map.values());
//判断map中是否包含某个key(标记、编辑相当于bean中的属性)
if(map.containsKey("name")) {
System.out.println(map.get("name"));
}else {
System.out.println("暂无数据........");
}
//判断map中是否包含某个value值
//不过一般不推荐使用containsValue.
if(map.containsValue("李四")) {
System.out.println("有此人.....");
}else {
System.out.println("没有此人......");
}
//hashmap特点:首先key...value数据格式
//是无顺序的,通过key来获取数据
//是非线程安全的(异步、插队的意思),非线程安全可能会导致数据不安全
//允许存放null键和null值 比如:map.put(null, null);
}
}
我再写一个关于book图书馆的例子.
我们先创建一个类,写一些属性
package Z.Kbzl.jihe;
//这个类的程序我真不想多说.不写注释了
public class Book {
String title;
public Book() {
// TODO Auto-generated constructor stub
}
public Book(String title) {
super();
this.title = title;
}
@Override
public String toString() {
return "Book [title=" + title + "]";
}
}
再建一个测试类
package Z.Kbzl.jihe;
import java.util.HashMap;
import java.util.Map;
public class BookTest {
public static void main(String[] args) {
Map book=new HashMap();//创建HashMap对象
Book book01=new Book("呐喊");//可以这样写
book.put("book1", book01);//存值
//一般是下面这种写法
book.put("book2", "狂人日记");//对象名打点调用put方法存值
book.put("book3", "彷徨");
book.put("book4", "故事新编");
//获取map中所有的key
System.out.println(book.keySet());
//获取map中所有的value
System.out.println(book.values());
if(book.containsKey("book1")) {//通过key来查询有没有此书
System.out.println(book.get("book1"));
}else {
System.out.println("没有这本书.....");
}
}
}
复制代码的同时,一定要学会去理解.
我觉得我的注释比老师的都写的细.
以上代码就不复制打印结果了.
HashTable继承体系
HashTable<K,V>也是一种key-value结构,它继承自Dictionary<K,V>,实现了Map<K,V>和Cloneable以及Serializable接口。
HashTable和HashMap的用法基本差不多.
HashTable示例
package Z.Kbzl.jihe;
import java.util.Hashtable;
import java.util.TreeMap;
public class HashableDemo {
public static void main(String[] args) {
//Hashable key----value
Hashtable ht=new Hashtable();
ht.put("name", "新一大帅哥");//put 存放数据
ht.get("name");//get根据key获取数据
ht.remove("删除数据");//remove根据key删除数据
ht.clear();//clear 清空
// ht.put(null, null);//不可以这样写
// System.out.println(ht.get(null));//打印会报空指针错误
//Collection是所有集合的超类
//这里我再写一下list,因为这些真的都是重点!!!!
//ArrayList 数组结构,是有序(连续),可以通过下标来访问..
//ArrayList 集合有序的,大小可变,查询效率高.
//LinkedList 底层链表结构,是有序(非连续结构)
//查询效率比较低,添加,删除效率比较高
//1.定义一个集合对象LinkedList
//对比hashmap和Hashtable的特点:
//hashmap特点:首先key...value数据格式
//是无顺序的,通过key来获取数据
//是非线程安全的(异步),非线程安全可能会导致数据不安全
//允许存放null键和null值 比如:map.put(null, null);
//hashtable特点:首先key...value数据格式
//是无顺序的,通过key来获取数据
//不允许存放null键和null值
//线程安全(同步),数据安全
//但是推荐以后使用hashmap,因为hashmap异步效率高.
还有一个treemap.
//treemap:二叉树(jdk1.8以后叫红黑树)算法,key有序,非线程安全
TreeMap tr=new TreeMap();
tr.put("1", "aaa");
tr.put("12", "ccc");
tr.put("11", "bbb");
tr.put("15", "eee");
tr.put("13", "ddd");
//自带排序功能
System.out.println(tr.keySet());//打印所有的key,且自带排序
// tr.put(null, null);//不可以这样写
//System.out.println(ht.get(null));//打印会报空指针错误
//不允许存放null键和null值
以上都是重重点.
最后别忘了去看看思维导图.
本文共 1204 个字数,平均阅读时长 ≈ 4分钟
评论 (0)