java Map、Eclipse的Debug追踪
Map:
学生有姓名和年龄(同名,同年龄为同一个人)家庭住址 学生当key 家庭住址当value 反之亦可以
示例代码:
public static void main(String[] args) {
show02();
}
/*
* key:String类型 不允许重复 重写hashCode和equals方法,保证key唯一
* value:Student类型 允许重复的(同名,同年龄为同一个人)
*
*/
public static void show02(){
HashMap<String, Student> map = new HashMap<>();
map.put("洛阳市", new Student("范秀媛", 18));
map.put("平顶山市", new Student("范秀媛", 18));
map.put("南阳市", new Student("范秀媛", 18));
map.put("郑州", new Student("范秀媛", 18));
//查看一下存储的元素情况
//使用keyset方法
Set<String> set = map.keySet();
//可以使用迭代器进行遍历
Iterator<String> iterator = set.iterator();
while (iterator.hasNext()) {
String key = iterator.next();
Student student = map.get(key);
System.out.println(key + " "+student);
}
/*
平顶山市 Student [name=范秀媛, age=18]
洛阳市 Student [name=范秀媛, age=18]
郑州 Student [name=范秀媛, age=18]
南阳市 Student [name=范秀媛, age=18]
*/
}
/*
* key:Student类型 同名同年龄的
* value:String类型
*/
public static void show01(){
//构建一个HashMap
HashMap<Student,String> map = new HashMap<>();
map.put(new Student("小孙",20), "六大街");
map.put(new Student("小孙",20), "六大街");
map.put(new Student("小王",20), "八大街");
map.put(new Student("小丽",20), "八大街");
//展示map中存储的元素
//使用Entry来进行遍历
Set<Entry<Student, String>> set = map.entrySet();
//增强for循环
for (Entry<Student, String> entry : set) {
Student key = entry.getKey();
String value = entry.getValue();
System.out.println(key+" "+value);
}
}
当给HashMap中存储自定义对象时,如果自定义对象作为key值,这是要保证对象的唯一性,
必须重写对象的hashCode和equals方法如果要保证Map中存储元素的顺序。
主要体现在kay值上,可以使用java.util.LinkedHashMap集合来存储
LinkedHashMap:
咱们知道HashMap保证成对元素唯一,并且查询速度相对较快,但是成对的元素存放进去无法保证顺序,
既要保证元素有序,又要保证速度快,可以使用LinkedHashMap
java.util.LinkedHashMap<K,V> extends HashMap<K,V>
数据结构采用的是哈希表+链表结构(记录元素顺序),具有可预知的迭代顺序
此实现不是同步的
一个字符串用Map 判断每个字符出现了几次
public static void main(String[] args) {
LinkedHashMap<Character,Integer> linkedHashMap = new LinkedHashMap<>();
String str = "abcaa";
char[] charArray = str.toCharArray();
for (int i = 0; i < charArray.length; i++) {
if (linkedHashMap.containsKey(charArray[i])) {
linkedHashMap.put(charArray[i], linkedHashMap.get(charArray[i])+1);
}else{
linkedHashMap.put(charArray[i], 1);
}
}
System.out.println(linkedHashMap);
}
Hashtable
java.util.Hashtable<K,V>implements Map<K,V>接口
Hashtable:底层是一个哈希表,是一个线程安全的集合,是单线程的集合,速度慢
HashMap:底层也是一个哈希表,是一个线程不安全的集合,是多线程的集合,速度快
HashMap集合:可以存储null,key值。null的value值
Hashteable集合:不可以存储null值和null键
Hashtable和vector集合一样在JDK1.2版本之后被更先进的集合(HashMap,ArrayList)取代了
Hashtable有一个子类Properties依然活跃在历史的舞台上
Properties集合是一个唯一和IO流相结合的集合
Eclipse的Debug
Debug测试程序:
可以让代码逐行执行,查看代码的执行过程,调试程序中出现的bug
使用方式:
在行号的左边,鼠标左键双击,添加断点(添加到方法的首行,哪里有bug我就添加到哪里)
右键,选择 Debug as ---》Run Application 启动Debug程序
执行程序:
黄色方块+蓝色三角Resume(F8):当前的程序执行到下一个断点处,
如果没有下一个断点,那么程序就结束了
红色正方形Terminate(Ctrl+F2):打断整个进程
短的向下的黄色箭头Step into(F5):进入到当前的方法
短的向右的黄色箭头Step Return(F7):退出当前执行的方法
长的向下的黄色箭头Step Over(F6):运行下一行代码,不进方法,但是有断点必须进来

浙公网安备 33010602011771号