package cn.itcast.p2.bean;
public class Person implements Comparable<Person> {
private String name;
private int age;
public Person() {
super();
}
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
public int compareTo(Person p){
// Person p = (Person)obj;
int temp = this.age - p.age;
return temp==0?this.name.compareTo(p.name):temp;
}
//!!!!用IDE快捷生成,重写hashCode对应本类属性的判断唯一性,将重复的对象去掉
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + age;
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Person other = (Person) obj;
if (age != other.age)
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
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 String toString() {
return "Person:"+getName()+":"+getAge();
}
}
package cn.itcast.p8.treemap.demo;
import java.util.Iterator;
import java.util.Map;
import java.util.TreeMap;
import cn.itcast.p2.bean.Student;
import cn.itcast.p3.comparator.ComparatorByName;
public class TreeMapDemo {
/**
* @param args
*/
public static void main(String[] args) {
//TreeMap有个比较器,而Student是Person的子类,所以newComparatorByName一样用
TreeMap<Student,String> tm = new TreeMap<Student,String>(new ComparatorByName());
tm.put(new Student("lisi",38),"北京");
tm.put(new Student("zhaoliu",24),"上海");
tm.put(new Student("xiaoqiang",31),"沈阳");
tm.put(new Student("wangcai",28),"大连");
tm.put(new Student("zhaoliu",24),"铁岭");
Iterator<Map.Entry<Student, String>> it = tm.entrySet().iterator();
while(it.hasNext()){
Map.Entry<Student,String> me = it.next();
Student key = me.getKey();
String value = me.getValue();
System.out.println(key.getName()+":"+key.getAge()+"---"+value);
}
}
}
package cn.itcast.p7.hashmap.demo;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;
import cn.itcast.p2.bean.Student;
public class HashMapDemo {
/**
* @param args
*/
public static void main(String[] args) {
/*
* 将学生对象和学生的归属地通过键与值存储到map集合中。
*
*/
//!!!HashMap是无序的,TreeMap是有序的!!!
HashMap<Student,String> hm = new HashMap<Student,String>();
hm.put(new Student("lisi",38),"北京");
hm.put(new Student("zhaoliu",24),"上海");
hm.put(new Student("xiaoqiang",31),"沈阳");
hm.put(new Student("wangcai",28),"大连");
hm.put(new Student("zhaoliu",24),"铁岭");
// Set<Student> keySet = hm.keySet();
// Iterator<Student> it = keySet.iterator();
Iterator<Student> it = hm.keySet().iterator();
while(it.hasNext()){
Student key = it.next();
String value = hm.get(key);
System.out.println(key.getName()+":"+key.getAge()+"---"+value);
}
}
}
分享到:
相关推荐
- Map接口:理解HashMap、TreeMap、LinkedHashMap的区别和使用场景。 - 集合遍历:掌握foreach循环遍历集合的方法。 - 集合操作:理解add、remove、contains、equals、hashCode等方法的实现原理。 5. **内存管理...
- equals()方法用于判断两个对象是否逻辑相等,根据自反性、对称性、传递性、一致性及对null的处理来实现。 - 当在集合中查找元素或Map中查找键时,如果对象的equals()方法没有正确覆盖,可能导致查找失败。同时,...
17. **`Override` 与 `Overload` 的含义及区别**: - `Override` 指子类重写父类的方法。 - `Overload` 指在同一类中重载同名方法。 18. **接口与抽象类的区别**: - 接口只能定义常量和抽象方法。 - 抽象类...
在面试中,对于初级开发工程师来说,掌握Java集合框架的基本概念、特性和使用方法是非常关键的。以下是一些关于Java集合框架的必备知识点,主要涵盖了List、Map和Set接口的主要实现类及其特性。 1. **List接口**:...
- 集合的拷贝、比较与转换:clone(), equals(), hashCode()方法,以及Collections工具类的使用。 6. **IO流** - 流的概念:输入流(Input Stream)和输出流(Output Stream)的基本理解。 - 文件操作:File类的...
4. **键值对**:键(Key)必须实现`hashCode()`和`equals()`方法,以确保正确的哈希计算和比较。值(Value)可以是任意对象。 5. **键的唯一性**:在`HashMap`中,键是唯一的,相同的键不能添加多次。如果尝试插入...
- 使用自定义类作为键时,需重写hashCode()和equals()方法以保持一致性。 总的来说,`Map`是编程中非常重要的数据结构,它简化了数据的管理和检索。了解其工作原理和使用技巧对于编写高效代码至关重要。在实际项目...
Map接口定义了多种操作键值对的方法,而HashMap和TreeMap是两种常见的Map实现类。 1. HashMap - 数据结构:HashMap基于哈希表实现,内部使用数组加链表或者红黑树的结构。每个元素是一个内部类Node,实现了Map....
- `equals(Object o)`:比较Map是否与另一个对象相等,考虑键值对的匹配。 - `hashCode()`:返回Map的哈希码,用于比较和存储。 7. **Map的视图**: - `entrySet()`:返回包含Map中所有键值对的Set视图。 - `...
当插入新键值对时,TreeMap会根据键的compareTo()方法(或比较器的compare()方法)来确定键的相对位置。如果插入的键已经存在,新的键值对将不会被添加,因为键必须是唯一的。 **TreeSet** TreeSet同样基于红黑树...
- 如果HashMap的键是自定义对象,需要重写equals()和hashCode()方法以保持排序后的键值对应关系。 - 如果对HashMap进行大量的排序操作,考虑使用TreeMap,它默认按照key的自然顺序排序,也可以自定义Comparator。 *...
- `put()` 方法:根据键对象的 `hashCode()` 计算哈希值定位到数组中的索引位置,再使用键的 `equals()` 方法判断是否与已存在的键相同。 - `get()` 方法:同样先根据键的 `hashCode()` 定位到数组索引,再通过键...
比较器与可比较 hashCode() 和 equals() 之间的契约 Java是按引用还是按值传递对象? 迭代与递归 ##3。 类和接口 什么是实例初始化器? 字段不能被覆盖? 继承与组合 如何使用 Java 枚举? 有多少种内部类? 什么是...
"=="与equals方法的区别?** - **"=="** 比较两个对象的引用是否相同。 - **equals** 方法比较的是两个对象的内容是否相等(默认情况下比较的是引用)。 **12. 静态成员与实例成员的区别?** - **静态成员:** 属于...
这些接口的实现通常使用红黑树数据结构来保证元素的自然排序或根据用户提供的比较器排序。 - `SortedSet`:继承自`Set`,提供额外的方法来获取排序后的子集等。 - `SortedMap`:继承自`Map`,同样提供额外的方法...
- equals方法默认行为与==相同,但可以被重写以比较对象内容。 8. **hashCode方法**: - 用于哈希表(如HashMap)操作,返回对象的哈希码,用于快速定位对象。 9. **Object类的方法**: - equals()、hashCode()...
为了确保唯一性,存入 `HashSet` 的对象必须正确地重写 `hashCode()` 和 `equals()` 方法。 - **用途**:适用于需要快速查找和添加元素的场景。 - **排序**:不保证元素的任何特定顺序。 ##### TreeSet - **特点**...
- **正确的做法是在equals方法中验证对象相等性后才返回相同的hashCode。** #### 二十五、Java创建对象的方式 - **使用new关键字创建对象。** - **使用反射API创建对象。** - **使用克隆方法创建对象。** - **使用...
- HashSet利用HashMap实现,保证元素不重复,通过重写`hashCode()`和`equals()`方法实现。 7. **Comparable和Comparator**: - **Comparable**:实现了Comparable接口的对象可以进行自然排序,例如在集合中排序。...