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);
        }
    }
}
时间: 2024-11-19 09:02:03

Collections工具类的使用的相关文章

集合详解(五):集合嵌套与Collections工具类

一.集合嵌套 1.HashMap嵌套HashMap <span style="font-size:18px;"> /* * HashMap嵌套HashMap * * 传智播客 * jc 基础班 * 陈玉楼 20 * 高跃 22 * jy 就业班 * 李杰 21 * 曹石磊 23 * * 先存储元素,然后遍历元素 */ public void test3(){ // 创建集合对象 HashMap<String, HashMap<String, Integer>

day07(Set接口,HashSet类,hashcoad(),Collections工具类,Map集合)

Set接口 set接口的实现类特点 1.无序(取出来的顺序和存进去的数据的顺序不一致) 2.唯一(数据不能存相同的) 底层是用Map集合写的 HashSet类  实现了  set接口       唯一性  public class HashSetTest { public static void main(String[] args) { HashSet<String> hs=new HashSet<String>(); hs.add("hello"); hs.

Java集合框架:Collections工具类

java.util.Collections工具类提供很多有用的方法,使得程序猿操作集合类的时候更加的方便容易,这些方法都是静态的.整个Collections工具类源码差不多有4000行,我们针对一些典型的方法进行阐述. 1. 调用一个空List,Set,Map public static final List EMPTY_LIST = new EmptyList<>(); public static final Map EMPTY_MAP = new EmptyMap<>(); p

TreeMap和TreeSet在排序时如何比较元素?Collections工具类中的sort()方法如何比较元素?

TreeSet要求存放的对象所属的类必须实现Comparable接口,该接口提供了比较元素的compareTo()方法,当插入元素时会回调该方法比较元素的大小.TreeMap要求存放的键值对映射的键必须实现Comparable接口从而根据键对元素进行排序.Collections工具类的sort方法有两种重载的形式,第一种要求传入的待排序容器中存放的对象比较实现Comparable接口以实现元素的比较:第二种不强制性的要求容器中的元素必须可比较,但是要求传入第二个参数,参数是Comparator接

JAVA Collections工具类sort()排序方法

主要分析内容: 一.Collections工具类两种sort()方法 二.示例 一.Collections工具类两种sort()方法 格式一: public static <T extends Comparable<? super T>> void sort(List<T> list) 说明:该方法中的泛型<T>都是Comparable接口的子类,即只有是Comparable接口子类类型的数据,才能进行比较排序.如果其他类型的数据要进行比较排序,必须继承Co

Collections工具类和Arrays工具类

Collections 工具类 Collections类是对集合进行操作的类,他里面没有特有的成员,所有的方法都是静态的. 常用的方法 sort(List L):List集合本身对象不具备比较功能,使用了这个方法以后能够对List集合中的元素进行排序.sort()方法本身要求对象实现了Comparable sort(List<T> l ,Comparator<? super T>)或者你传递一个自定义的比较器也可以. binarySearch(List <T>l,<

Collections工具类、Map集合、HashMap、Hashtable(十八)

1.Map集合概述和特点 * A:Map接口概述 * 去重复, * 查看API可以知道, * 将键映射到值的对象, * 一个映射不能包含重复的键, * 每个键最多只能映射到一个值.* B:Map接口和Collection接口的不同 * Map是双列的,Collection是单列的. * Map的键唯一,Collection的子体系Set是唯一的,即不重复. * Map集合的数据结构值针对键有效,跟值无关;Collection集合的数据结构是针对元素有效. 2.Map集合的功能概述 * a:添加功

JAVA-Properties类和Collections工具类

Properties类 import java.io.FileReader; import java.util.Enumeration; import java.util.Properties; /* * Properties类,键值对集合,是Hashtable的子类 * 但只能存储字符串键值对 */ public class Test07 { public static void main(String[] args) throws Exception { test1(); test2();

9.9-全栈Java笔记:遍历集合的N种方式总结&Collections工具类

遍历集合的N种方式总结 [示例1]遍历List方法1,使用普通for循环 for(int i=0;i<list.size();i++){         //list为集合的对象名 String temp = (String)list.get(i); System.out.println(temp); } [示例2]遍历List方法2,使用增强for循环(使用泛型定义类型!) for (String   temp : list) { System.out.println(temp); } [示例

黑马程序员——19,Collections工具类,Arrays工具类,高级for循环,可变参数,静态导入

------<ahref="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------- 黑马程序员--19,Collections工具类,Arrays工具类 /* Collections是一个类,注意,这里后面带有一个s 千万不要和Collection弄混了!Collection只是接口而已. 两者要区别开来. Collect