java集合——集合与数组间的转换+算法

【0】README

0.1) 本文描述转自 core java volume 1, 源代码为原创,旨在理解 java集合——集合与数组间的转换+算法 的相关知识;
0.2) for full source code , please visit https://github.com/pacosonTang/core-java-volume/blob/master/chapter13/CollectionAndArray.java + https://github.com/pacosonTang/core-java-volume/blob/master/chapter13/AlgTest.java


【1】集合与数组间的转换

1.1)数组转换为集合: Arrays.asList 的包装器提供了这个功能:

HashSet<String> numbers = 
                new HashSet<>(Arrays.asList(new String[]{"1", "7", "6"}));

1.2)集合转换为数组:toArray()

Object[] values = numbers.toArray();

1.3)出现的问题:
这里写图片描述

1.4)解决方法: 必须使用另外一种toArray 方法, 并将其设计为所希望的元素类型且长度为0的数组。(这样情况下,没有创建任何新数组)
这里写图片描述
Attention)如果把 HashSet 换为 List接口的实现类的话,不会存在这种问题;


【2】算法——排序与混排

2.1)Collections类中的sort方法可以对实现了 List 接口的集合进行排序:

List<String> staff = new LinkedList<>();
....
Collections.sort(staff)
  • 2.1.1)这个方法假定列表元素实现了Comparable 接口。如果要采用其他方式对列表进行排序,需要将 Comparator 对象作为第二个参数传递给 sort 方法;
  • 2.1.2)看个荔枝:
    这里写图片描述
  • 2.1.3)如果想降序对列表进行排序, 可以使用静态方法 Collections.reverseOrder()方法, 该方法返回 比较器,比较器返回 b.compareTo(a), 如:
Collections.sort(staff, Collections.reverseOrder());

2.2) 有关术语定义:

  • 2.2.1)如果列表支持set方法,则是可修改的;
  • 2.2.2)如果列表支持 add 和 remove 方法, 则是可改变大小的;
  • 2.2.3)Collections 有一个方法 shufffle, 其功能和 排序切好相反。 即随机混排列列表中的元素顺序, 如:
ArrayList<String> staff = ...;
Collections.shuffle(staff);
  • 如果提供的列表没有实现 RandomAccess 接口, shuffle 方法将元素复制到数组中。 然后打乱数组元素的顺序, 最后再将打乱顺序后的元素copy 回 列表;

2.3)看个荔枝:
这里写图片描述

API java.util.Collections 1.2
static <T extends Comparable<? super T>> void sort(List<T> elements)
static <T> void sort(List<T> elements, Comparator<? super T> c)
static void shuffle(List<?> elements)
static void shuffle(List<?> elements, Random r)
static <T> Comparator<T> reverseOrder(): 返回一个比较器, 它用与 Comparable 接口的compareTo 方法规定的顺序的逆序对元素进行排序;
static <T> Comparator<T> reverseOrder(Comparator<T> comp): 返回一个比较器, 它用与 comp 给定的顺序的逆序对元素进行排序;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值