存入key-value对V put(K k,V v) ;获取key所对应的value值V get(K k);判断Map是否包含给定的key或value值:boolean containsKey(K k),boolean containsValue(V v);遍历所有的key:Set
/**
* java.util.Map
* Map-查找表
* 以key-value对的形式存储元素。
* 常用实现类:HashMap
* @author Administrator
*
*/
public class Maptest{
public static void main(String[] args) {
Map<String,Integer> map = new HashMap<String,Integer>();
/*
* V put(K k,V v) 将给定的key-value对存入Map中。
* Map要求key不允许重复(依靠key元素equals比较的结果判定是否重复)
* 若给定的key在Map中已经存在则替换value。被替换的value会被返回。
*/
map.put("语文", 99);
map.put("化学", 95);
System.out.println(map);
//替换value
Integer num = map.put("化学", 100);
System.out.println(map);
System.out.println("old:"+num);
/*
* V get(K k)
* 获取当前Map中指定的key所对应的value
* 若给定的key在Map中不存在,则返回值为null
*/
num = map.get("语文");
System.out.println("语文:"+num);
/*
* 若Map中的value为包装类,那么在接收时应当使用包装类
* 类型的变量接收,不要使用基本类型,因为会引发自动拆箱,
* 若返回的value是null就会触发空指针异常。
*/
num = map.get("体育");
System.out.println("体育:"+num);
/*
* boolean containsKey(K k)
* 判断当前Map是否包含给定的key
*
* boolean containsValue(V v)
* 判断当前Map是否包含给定的value
*/
boolean c = map.containsKey("体育");
System.out.println("包含key:"+c);
/*
* 遍历所有的key
* Set
* 将当前Map中的所有key存入一个Set集合后返回。
*/
Set
for(String key : keySet){
System.out.println("key:"+key);
}
/*
* 遍历所有key-value对:
* Set
* Entry是Map的内部类,其每一个实例用于表示Map中的一组键值对。
* 该方法会将所有的key-value对以若干Entry
* 实例的形式存入一个Set集合后返回。
*/
Set<Entry<String,Integer>> entrySet = map.entrySet();
for(Entry<String,Integer> e:entrySet){
String key = e.getKey();
Integer value = e.getValue();
System.out.println(key+":"+value);
}
/*
* 遍历所有的value
* Collection
* 将当前Map中所有的value存入一个集合后返回。
*/
Collection
for(Integer value : values){
System.out.println("value:"+value);
}
/*
* V remove(K k)
* 删除指定的key所对应的键值对。
* 返回值为对应的value
*/
Integer num = map.remove("英语");
System.out.println(map);
System.out.println("old:"+num);
}
}
/**
* 当一个类作为HashMap的key使用时,其
* 重写的equals方法与hashcode方法要遵循
* 一定的原则,不妥善重写会影响HashMap的查询性能
* 原则:
* 1:当我们重写equals方法时,就应当连同重写hashcode
* 2:hashcode方法返回的值应当是一个稳定的值,即:
* 当参与equals比较的属性的值没有发生改变的前提
* 下,多次调用hashcode方法返回的数字应当不变。
* 3:hashcode方法应当与equals方法的返回值具有一致性,即:
* 当两个对象equals比较结果为true,那么他们的hashcode值也应当相同。
* 返过来虽然不是必须的,但尽量保证当两个对象hashcode值相同时,
* equals比较也为true,否则会在HashMap中出现链表,影响查询效率。
*/
public class Key {
private int x;
private int y;
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + x;
result = prime * result + y;
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Key other = (Key) obj;
if (x != other.x)
return false;
if (y != other.y)
return false;
return true;
}
}
/**
* java.util.Queue队列
* 可以存放一组元素,但是存取元素必须遵循先进先出原则
* 常用实现类:java.util.LinkedList
*
* @author Administrator
*
*/
public class QueueTest{
public static void main(String[] args) {
Queue
/*
* boolean offer(E e)
* 向队尾追加元素
*/
queue.offer("one");
queue.offer("two");
System.out.println(queue);
/*
* E poll()
* 获取队首元素,当获取后该元素即从队列中被删除了。
* 所以该方法是出队操作。
*/
String str = queue.poll();
System.out.println(str);
System.out.println(queue);
/*
* E peek()
* 引用队首元素,与poll方法不同,
* 虽然可以获取队首元素,但是不做出队操作。
*/
str = queue.peek();
System.out.println(str);
System.out.println(queue);
/*
* 遍历队列
*/
System.out.println("开始遍历!");
while(queue.size()>0){
str = queue.poll();
System.out.println(str);
}
System.out.println(queue);
}
}
/**
* 栈
* 存储一组元素,但是存取元素必须遵循先进后出原则
* java没有为栈专门提供接口,而是使用双端队列来实现。
* 双端队列:两端都可以进出元素的队列。
*
* 栈:当需要实现诸如"后退"相关功能时,可以使用栈。
* @author Administrator
*
*/
public class StackDemo {
public static void main(String[] args) {
Deque
stack.push("one");
stack.push("two");
System.out.println(stack);
String str = stack.pop();
System.out.println(str);
System.out.println(stack);
while(stack.size()>0){
str = stack.pop();
System.out.println(str);
}
System.out.println(stack);
}
}