集合Set-Map+总结

// 根据时间升序排序
        Collections.sort(map, new Comparator<Map<String, Object>>() {
            public int compare(Map<String, Object> o1, Map<String, Object> o2) {
                String d1 = (String) o1.get("time");
                String d2 = (String) o2.get("time");
                return d1.compareTo(d2);
            }
        });

 

Set

①HashSet-快速定位

无序-foreach遍历

增加-set.add("");

插入重复元素,覆盖已存在

添加时判断两个对象hashCode,equals判断

例:

/**

* 覆写Account类的equals方法

* @param obj必须是Object类型,否则不能实现覆写

*/

public boolean equals(Object obj) {

if (this == obj) { // 基于性能优化的地址相等判断

return true;

}

if (!(obj instanceof Account)) { // 不是Account对象

return false;

}

Account acc = (Account) obj; // 向下转型

if (acc.getId().equals(this.getId())

&& acc.getPassword().equals(this.getPassword())

&& acc.getBalance() == this.getBalance()) {

return true;

} else {

return false;

}

}

/**

* 覆写hashCode()方法。质数和避免偶然相等

*/

public int hashCode() {

return this.getId().hashCode() * 11

+ this.getPassword().hashCode() * 13

+ ((int) this.getBalance()) * 17;

}

②TreeSet--类转换(ClassCastException)异常

当需要把一个对象放入TreeSet集合时,如果重写该对象对应类的equals方法,应保证该方法与compareTo方法有一致的结果。如果两个对象通过equals方法比较得true,通过compareTo方法比较应得到0。

如果改变TreeSet集合中某个对象的属性,可能会导致与其他对象的大小发生了改变,TreeSet不会再次调整它们的顺序,甚至还会导致出现相同的对象。

 

 

Map-键值对(Key,value)

①HashMap

Key是无序存放的,并且Key值不可重复,Key和value是一一对应的,不同key的value可以重复

如果要加入的键值对的key值和HashMap中某个键值对的Key值是相同的,就会将这个Key所对应的value值进行覆盖。

当迭代所有键值对时,其遍历顺序与插入顺序不一样

map.put("key",value);

map.containsKey("key");//查找指定key是否存在

map.containsValue("value");查找指定value是否存在

Set<String> keys = map.keySet(); // 全部的key-foreach

Collection<String> values = map.values(); // 全部的value-foreach

Set<String> keys = map.keySet();//foreach{"key:"+e+"value:"+map.get(e);}

③HashMap

Map.Entry接口可以在外部通过"外部类.内部类"的形式直接调用

for(Map.Entry<String, String> me : map.entrySet()) {me.getKey()+me.getValue();}

可使用自定义类作为value

④Hashtable--Map.Entry

HashMap非线程安全,异步处理方式,性能更高

Hashtable线程安全,同步处理方式,性能较低

⑤TreeMap-可以按key排序

Set<String> keys = map.keySet(); // 得到全部的key-foreach{e+map.get(e);}

 

 

集合总结

①集合工具类

提供了一个操作List、Set和Map集合的工具类:Collections。该工具类里提供了大量方法对集合元素进行排序、查询和修改等操作,还提供了将集合对象设为不可变,对集合对象实现同步控制等方法。

ArrayList<Integer> list = new ArrayList<Integer>();

Collections.reverse(list); // 将集合次序反转

Collections.sort(list); // 将集合排序

print(Collections.max(list)); // 输出集合中的最大元素

print(Collections.min(list)); // 输出集合中的最小元素

Collections.replaceAll(list,6,0); // 将集合中值为6的元素替换为0

Collections.frequency(list, 8); // 判断8在集合中出现的次数

Collections.sort(list); // 将集合排序

print(Collections.binarySearch(list, 8)); // 只有排序以后的集合才可以使用二分法查询

②List接口--有序列表,允许存放重复的元素,通过索引访问

ArrayList:实质是一个会自动增长的数组,查询快,增删慢。

LinkedList:用双向循环链表实现,增删快,查询慢。

ArrayList和LinkedList在用法上没有区别。

③Set接口--没有重复的元素集合

HashSet:元素是无序的(这个无序指的是数据的添加顺序和后来的排列顺序不同),而且元素不可重复。

TreeSet:基于(平衡)树的数据结构,有序

④Map接口

Map是由Key,value组成的键值对。Key是没有顺序,不可重复的。value是可以相同的, Key和value一一对应。

HashMap:键值对,key不能重复,但是value可以重复;无序。

TreeMap: 对key排好序的Map。

处理Map的三种集合:

·key集KeySet()

·value集values()

·key-value集enrySet()

⑤集合遍历方式

for(int i=0;i<list.size();i++){

System.out.println(list.get(i));

}

Iterator it=list.iterator();

while(it.hasNext()){

System.out.println(it.next());

}

for(Object obj:list){

System.out.println(obj);

}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值