Collections工具类的使用
创建实体类
public class News implements Comparable {
private int id; //新闻编号
private String title; //新闻标题
@Override
public String toString() {
return "新闻 [编号=" + id + ", 标题=" + title + "]";
}
public News() { //无参构造
super();
}
public News(int id, String title) { //带参构造
super();
this.id = id;
this.title = title;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
//重写 排序的规则 升序
@Override
public int compareTo(Object o) {
News news=(News) o;
if (news.getId()==this.id) {
return 0;
}else if (news.getId()<this.id) {
return 1; // 降序 return -1;
}else {
return -1; // 降序 return 1;
}
}
}
创建测试类
public class CollectionsTest {
public static void main(String[] args) {
/*
* 操作集合的工具类Collections
*/
//创建一个集合
List<String> list=new ArrayList<String>();
list.add("b");
list.add("d");
list.add("c");
list.add("a");
System.out.println("没有排序====》"+list); //插入时候的顺序
//对集合进行随机排序
Collections.shuffle(list);
//开奖号码 136 顺序必须对 631不对
System.out.println("随机排序====》"+list);
//按照字母的升序排列
Collections.sort(list);
System.out.println("升序====》"+list);
//降序 也是必须在升序之后
Collections.reverse(list);
System.out.println("降序====》"+list);
//查询 "b"在集合中的位置 必须先升序 排列之后再查询
Collections.sort(list);
System.out.println(Collections.binarySearch(list, "a"));
System.out.println("****************************");
List<News> news=new ArrayList<News>(); //想实现对象的排序
news.add(new News(3, "新闻3"));
news.add(new News(1, "新闻1"));
news.add(new News(4, "新闻4"));
news.add(new News(2, "新闻2"));
for (News news2 : news) {
System.out.println(news2);
}
/*
* 如果News没有重写Comparable接口中的compareTo()是编译报错的!
* 我们必须重写compareTo() 定义规则
*/
Collections.sort(news);
System.out.println("对象排序之后.........");
for (News news2 : news) {
System.out.println(news2);
}
}
@Test
public void test1(){
//通过String类中的split()把字符串转换成字符串数组
String[] str1="a b c d d d".split(" ");
//把数组转换成集合
List<String> asList = Arrays.asList(str1);
System.out.println(asList);
String[] str2="c d".split(" ");
List<String> asList2= Arrays.asList(str2);
//最后一次出现的位置
System.out.println(Collections.lastIndexOfSubList(asList, asList2));
//首次出现的位置
System.out.println(Collections.indexOfSubList(asList, asList2));
}
@Test
public void test2(){
String[] str1="a b c d e f".split(" ");
//把数组转换成集合
List<String> list = Arrays.asList(str1);
System.out.println(list);
//集合中的元素向后移distance个位置,之后被覆盖的元素循环前移
Collections.rotate(list, 2);
System.out.println(list);
}
}
排序
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("x");
list.add("z");
list.add("a");
list.add("e");
list.add("b");
System.out.println("默认插入数据时候的顺序===》" + list);
/*// 逆序
Collections.reverse(list);
System.out.println("Collections.reverse时候的顺序===》" + list);
// 排序 升序
Collections.sort(list);
System.out.println("Collections.sort时候的顺序===》" + list);
// 随机排序
Collections.shuffle(list);
System.out.println("Collections.shuffle时候的顺序===》" + list);
System.out.println(Collections.binarySearch(list, "z"));*/
List<String> list2 = new ArrayList<>();
list2.add("a");
list2.add("e");
list2.add("b");
System.out.println("list2默认插入数据时候的顺序===》" + list2);
// 查询list2在list中出现的位置
// 以整体作为比较System.out.println(Collections.indexOfSubList(list, list2));
// 集合中的元素向后移参数2个位置,之后被覆盖的元素循环到集合的前面
Collections.rotate(list2, 3);
System.out.println(list2);
}
map遍历的效率比较
@Test
public void test(){
Map<String, Object> map=new HashMap<String, Object>();
for (int i = 0; i <1000000; i++) {
map.put("key"+i, "value"+i);
}
//获取当前毫秒数
Long a= System.currentTimeMillis();
//遍历map 首先获取所有key的集合
Set<String> set = map.keySet();
for (String key : set) {
map.get(key); //根据key取得value
}
//获取当前毫秒数
Long b= System.currentTimeMillis();
System.out.println("使用keySet遍历的时间是:"+(b-a)); //使用entry遍历 效率最高的
Set<Entry<String, Object>> entrySet = map.entrySet();
for (Entry<String, Object> entry : entrySet) {
entry.getValue();
}
//获取当前毫秒数
Long c= System.currentTimeMillis();
System.out.println("使用entrySet遍历的时间是:"+(c-b));
}
汉字的排序
public class ListTest {
public static void main(String[] args) {
//实现都汉字的排序 传入一个语言环境
Comparator<Object> collator=Collator.getInstance(Locale.CHINA);
ArrayList<String> list=new ArrayList<String>();
list.add("你好");
list.add("好");
list.add("啊");
list.add("它好");
//工具类
Collections.sort(list, collator);
for (String string : list) {
System.out.println(string);
}
}
}
Collections工具类的使用的更多相关文章
- JAVA Collections工具类sort()排序方法
主要分析内容: 一.Collections工具类两种sort()方法 二.示例 一.Collections工具类两种sort()方法 格式一: public static <T extends ...
- Map集合、HashMap集合、LinkedHashMap集合、Hashtable集合、Collections工具类和模拟斗地主洗牌和发牌
1.Map集合概述和特点 * A:Map接口概述 * 查看API可以知道: * 将键映射到值的对象 * 一个映射不能包含重复的键 * 每个键最多 ...
- Arrays工具类和Collections工具类
集合知识点总结 Arrays工具类 .binarySearch() .sort() .fill() //填充 int[] array = new int[10]; Arrays.fill(array, ...
- day07(Set接口,HashSet类,hashcoad(),Collections工具类,Map集合)
Set接口 set接口的实现类特点 1.无序(取出来的顺序和存进去的数据的顺序不一致) 2.唯一(数据不能存相同的) 底层是用Map集合写的 HashSet类 实现了 set接口 唯一 ...
- 34、Collections工具类简介
Collections工具类简介 就像数组中的Arrays工具类一样,在集合里面也有跟Arrays类似的工具类Collections package com.sutaoyu.Collections; ...
- TreeMap和TreeSet在排序时如何比较元素?Collections工具类中的sort()方法如何比较元素?
TreeSet要求存放的对象所属的类必须实现Comparable接口,该接口提供了比较元素的compareTo()方法,当插入元素时会回调该方法比较元素的大小.TreeMap要求存放的键值对映射的键必 ...
- Java:集合,Collections工具类用法
Collections工具类提供了大量针对Collection/Map的操作,总体可分为四类,都为静态(static)方法: 1. 排序操作(主要针对List接口相关) reverse(List li ...
- Java精选笔记_集合概述(Collection接口、Collections工具类、Arrays工具类)
集合概述 集合有时又称为容器,简单地说,它是一个对象,能将具有相同性质的多个元素汇聚成一个整体.集合被用于存储.获取.操纵和传输聚合的数据. 使用集合的技巧 看到Array就是数组结构,有角标,查询速 ...
- [19/03/27-星期三] 容器_Iterator(迭代器)之遍历容器元素(List/Set/Map)&Collections工具类
一.概念 迭代器为我们提供了统一的遍历容器的方式 /* *迭代器遍历 * */ package cn.sxt.collection; import java.security.KeyStore.Ent ...
- Java集合框架:Collections工具类
java.util.Collections工具类提供非常多实用的方法.使得程序员操作集合类的时候更加的方便easy,这些方法都是静态的. 整个Collections工具类源代码几乎相同有4000行.我 ...
随机推荐
- Vivado Logic Analyzer的使用
chipscope中,通常有两种方法设置需要捕获的信号.1.添加cdc文件,然后在网表中寻找并添加信号2.添加ICON.ILA和VIO的IP Core 第一种方法,代码的修改量小,适当的保留设计的层级 ...
- 通过camera + gallery android上传文件到html
今天做项目的时候遇到一个问题:当html通过js调用input of type file时候,希望android手机的选择器可以同时出现“相机”和“图片”等,但通过下面代码 Intent i = ne ...
- iptables详细教程:基础、架构、清空规则、追加规则、应用实例(转)
iptables防火墙可以用于创建过滤(filter)与NAT规则.所有Linux发行版都能使用iptables,因此理解如何配置iptables将会帮助你更有效地管理Linux防火墙.如果你是第一次 ...
- 使用ZBar来读取条形码和二维码的方法
版权声明:本文为博主原创文章,未经博主允许不得转载. 1.使用ZBar项目.下载地址是: http://zbar.sourceforge.net/iphone/index.html 2.新建一个项目. ...
- 2018.5.2(7:20到的办公室开始早课 阮一峰的JS) 所有的默默努力都是为了让自己看起来毫不费力
continue语句用于立即终止本轮循环,返回循环结构的头部,开始下一轮循环. break语句用于跳出代码块或循环. 标签(label) JavaScript 语言允许,语句的前面有标签(label) ...
- Log4j1.x初识
初识log4j1.x 研究源码首先要对项目要有整体的认识,这一章节主要让大家对log4j1.x有一个整体的认识,并以此为切入点,认识log4j1.x的真个框架 1 整体认识 先整体上对log4j1有一 ...
- svn还原文件中去掉已经删除的文件
1.到svn目录下,选择文件并提交 2.在弹出的对话窗口中,选择文件并右击,找到"解决" 3.再次点击"还原"的时候,已经删除的文件就没有了.
- eclipse中根据方法找到其实现类
面向接口编程中,程序全是面向接口变成调用,在维护别人写的系统的时候怎么样快速定位当前根据接口调用的方法是哪个实体类实现的: Ctrl + T/f4(光标放在需要查看的方法上,然后按Ctrl+T或者F4 ...
- C++ 4种强制类型转换
C++的四种强制类型转换为:static_cast.const_cast.reinterpret_cast和dynamic_cast 类型转换的一般形式:cast-name(expression); ...
- SVN 提交出错:Attempted to lock an already-locked dir
http://www.2cto.com/kf/201306/221414.html —————————————————————————————————————————————————————— 在ec ...