Java笔记--集合

1. HashSet

HashSet内部的数据结构是哈希表。在存储元素时,要使用hashcode方法确定位置。如果位置相同,再根据元素的equals来确定是否相同。
注:在String中,复写了equals方法,比较的是字符串的内容。

@Override
 public int hashCode()
 {
  return name.hashCode() +  age;
 }
@Override
 public boolean equals(Object obj) {
  Person p = (Person) obj;  
  return this.name.equals(p.name) && this.age == p.age;
   }

以上代码是在HashSet中自定义Person对象,在Person对象中,要覆盖两种方法。
补充:LinkedHashSet内部有双向链表确保有序。

2.Map.Entry

想要输出Map集合中的key和value,一般采用先使用keySet获取key值,返回的是一个key的set集合,再通过迭代器get(key)获取对应的value值。而Map.Entry可以一次性获取键值对。

HashMap<Integer,String> hm = new HashMap<Integer,String>();
  
  hm.put(1, "a");
  
  hm.put(2, "aa");
  
  hm.put(3, "aca");
  
  hm.put(4, "bab");
  
  Iterator<Map.Entry<Integer, String>> it = hm.entrySet().iterator();
  
  while(it.hasNext())
  {
   Map.Entry<Integer, String> map =(Map.Entry<Integer, String>) it.next();
   
   Integer key = map.getKey();
   
   String value = map.getValue();
   
   System.out.println(key+"..."+value);
   
   
  }

以上代码是在HashMap中通过Map.Entry获取键值对。

3.TreeSet & TreeMap

TreeSet和TreeMap 具备排序功能

实现Tree集合,必须实现比较方法:

1.新建Class 实现Comparator接口,覆盖compare方法,并new一个该类的对象,作为参数传递给Tree集合。

注:String字符串自带CompareTo功能,实现两个字符串比较,大于返回正数,小于返回负数,等于返回0.

public class CompareByName implements Comparator{
  @Override
 public int compare(Object o1, Object o2) {
  
  Student st1 = (Student)o1;
  
  Student st2 = (Student)o2;
  
  int t = st1.getName().compareTo(st2.getName());
  
  return t == 0? st1.getAge()-st2.getAge():t;
 }
}

以上代码为在TreeMap集合中实现自定义对象Student(String name, int age),自定义比较函数,实现根据名字(内置compareTo)比较字符串的大小。当两个字符串相同时,再比较两个对象的年龄。由于Tree集合中字符不能重复,所以当两个字符串比较之后相同时,后一个将覆盖前一个。

TreeMap<Student,String> tm = new TreeMap<Student,String>(new CompareByName());

新建TreeMap对象时,实现该比较函数即可。

2.自定义对象时,实现Compareable接口,并覆盖compareTo方法,即让元素本身具备比较方法。

public class Person implements Comparable {
 
 @Override
 public int compareTo(Object o) {
  
  Person p = (Person)o;
  
  int t = this.age-p.age;
  
  return t==0?this.name.compareTo(p.name):t;
 }

以上代码是在TreeSet集合实现自定义对象Person时,让Person实现Comparable接口,并复写compareTo方法,通过比较年龄实现比较。当年龄相同时,再比较字符串name,如果age和name都相同,只输出一次。

  TreeSet ts = new TreeSet();
  
  ts.add(new Person("john",22));
  
  ts.add(new Person("zoe",20));
  
  ts.add(new Person("allen",19));
  
  ts.add(new Person("jack",27));
  
  ts.add(new  Person("lily",20));

输出为:
allen…19
lily…20
zoe…20
john…22
jack…27
补充:LinkedHashMap可实现有序输出。

4.List和Set

List中元素有序且可重复,可使用set方法修改某个位置上的元素。
而Set中元素无序且不能重复,不能使用set方法修改某个位置上的元素。
想要遍历Set中的元素,只能使用Iterator和Foreach方法,不能使用List的get方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值