一、Comparable接口, Collections类

List的常用算法:

  • sort(List); 排序,如果需要对自定义的类进行排序, 那就必须要让其实现Comparable接口, 实现比较两个类大小的方法
  • shuffle(List); 随机排列
  • void reverse(List); 逆序排列(Linked效率较高)
  • copy(); 复制集合, 前提是size()相同(长度, 和容量的区别)
  • fill(List, Object);使用某个对象填充整个List
  • binarySearch();//使用二分搜索法之前先排序

例子:

package collectiontext;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List; public class Text2 {
@SuppressWarnings("unchecked")
public static void main(String[] args) {
List list = new ArrayList();
list.add("aaaa");
list.add("qqqq");
list.add("cccc");
list.add("xxxx");
System.out.println(list);
System.out.println("-------------------------"); //顺序排列
Collections.sort(list);//sort(List);排序,如果需要对自定义的类进行排序, 那就必须要让其实现Comparable接口,
//实现比较两个类大小的方法
System.out.println(list);
//随机排列
Collections.shuffle(list);//shuffle(List); 随机排列
System.out.println(list);
//反转排列(逆序排列)
Collections.reverse(list);//void reverse(List); 逆序排列(Linked效率较高)
System.out.println(list);
System.out.println("-------------------------"); List list2 = new ArrayList();
list2.add("1");
list2.add("2");
list2.add("3");
list2.add("4");
Collections.copy(list2, list);//copy();复制集合, 前提是size()相同(注意长度, 和容量的区别)
System.out.println(list2);
System.out.println("-------------------------"); Collections.fill(list2, new Person());//fill(List, Object);使用某个对象填充整个List
System.out.println(list2);
System.out.println("-------------------------"); List list3 = new ArrayList();
for (int i = 0; i < 10; i++) {
list3.add(i);
}
int a = Collections.binarySearch(list3, 8);//binarySearch();一定要注意,使用二分搜索法之前先排序,
//这里刚好是排好序的,不好看出来,但是一定要注意
System.out.println(a);
System.out.println(list3);
}
} class Person{ @Override
public String toString() {
return "Person []";
} }

二、泛型(Generic):里面写的一定是引用类型

  1, 装入集合的类型都被当作Object对待, 从而失去了自己的实际类型
  2, 集合中取出来的时候需要转型, 效率低, 易出错

  好处: 增强程序的可读性和稳定性

例子:

package collectiontext;

import java.util.ArrayList;
import java.util.List; public class Text3 {
public static void main(String[] args) {
List<String> list = new ArrayList<String>();//这个list里面只能装String类型的东西
List<Person2> list2 = new ArrayList<Person2>();//这个list里面只能装Person2类型的东西
List<Student> list3 = new ArrayList<Student>(); list.add("qqq");
list2.add(new Person2());
list2.add(new Student());//Student继承了Person,即父类的引用指向子类的对象,多态的问题
list3.add(new Student());
}
} class Person2{ //定义了一个Person2类,通俗一点,就是定义了一个Person2类型 } class Student extends Person2{ }

三、Comparable接口:一个方法(comparaTo)

int compareTo(T o)

  将此对象与指定的对象进行比较以进行排序。

  • 该对象小于指定对象,返回一个负整数(-1);
  • 该对象等于指定对象,返回一个零(0);
  • 该对象大于指定对象,返回一个正整数(1);

例子:

package collectiontext;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List; public class Text4 {
public static void main(String[] args) {
List<Animals> list = new ArrayList<Animals>();
for (int i = 0; i < 5; i++) {
list.add(new Animals("name" + i, i+5));
}
System.out.println(list);
Collections.sort(list);
System.out.println(list);
}
} class Animals implements Comparable<Animals> {
private String name;
private int age;
public Animals(String name, int age) {
super();
this.name = name;
this.age = age;
}
@Override
public int compareTo(Animals o) {
// TODO Auto-generated method stub
if(this.age > o.age){
return -1;
} else if(this.age < o.age){
return 1;
} else{
return this.name.compareTo(o.name);
}
}
@Override
public String toString() {
return "Animals [name=" + name + ", age=" + age + "]";
} }

Java基础之Comparable接口, Collections类,Iterator接口,泛型(Generic)的更多相关文章

  1. Java基础之Collection与Collections浅析

    Java基础之Collection与Collections浅析 一.前言: 位于Java.util包下的Collection与Collections都是Java中重要的工具类,它们都是Java集合框架 ...

  2. Java基础系列-Comparable和Comparator

    原创文章,转载请标注出处:<Java基础系列-Comparable和Comparator> 一.概述         Java中的排序是由Comparable和Comparator这两个接 ...

  3. Java基础之Comparable与Comparator

    Java基础之Comparable与Comparator 一.前言: Java中实现对对象的排序一般情况下主要有以下两种实现方式(万物皆对象嘛): 对象所在的类实现Comparable 接口 定义比较 ...

  4. Java基础-DBCP连接池(BasicDataSource类)详解

    Java基础-DBCP连接池(BasicDataSource类)详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 实际开发中“获得连接”或“释放资源”是非常消耗系统资源的两个过程 ...

  5. java中有关流操作的类和接口

    一.java操作l流有关的类和接口 1.File 文件类 2.RandomAccessFile 随机存储文件类 3.InputStream 字节输入流 4.OutputStream 字节输出流 5.R ...

  6. Java基础-类加载机制与自定义类Java类加载器(ClassLoader)

    Java基础-类加载机制与自定义类Java类加载器(ClassLoader) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 关于类加载器的概念和分类我就不再废话了,因为我在之前的笔 ...

  7. JAVA面向对象-----接口与类、接口之间的关系

    接口与类.接口之间的关系 大家之前都知道类与类之间的关系继承,那么接口与类之间又是怎样子的关系呢? 接口与类之间是实现关系.非抽象类实现接口时,必须把接口里面的所有方法实现.类实现接口用关键字impl ...

  8. Java基础学习笔记十二 类、抽象类、接口作为方法参数和返回值以及常用API

    不同修饰符使用细节 常用来修饰类.方法.变量的修饰符 public 权限修饰符,公共访问, 类,方法,成员变量 protected 权限修饰符,受保护访问, 方法,成员变量 默认什么也不写 也是一种权 ...

  9. java基础37 集合框架工具类Collections和数组操作工具类Arrays

    一.集合框架工具类:Collections 1.1.Collections类的特点 该工具类中所有的方法都是静态的 1.2.Collections类的常用方法 binarySearch(List< ...

随机推荐

  1. 【redis】java操作redis时,StringRedisTemplate的expire()方法的作用,什么时候使用

    java操作redis时,StringRedisTemplate的expire()方法的作用,什么时候使用 //重新设置过期时间为30分钟,刷新时间 redisTemplate.expire(MsOp ...

  2. node.js中的exports和module.exports

    不同的编程语言都有各自的代码组织和复用的方式,如.net.php中的命名空间,python中的import,ruby中的module等,来避免命名空间污染.一直都没搞清楚node中的exports和m ...

  3. hdu254 DFS+BFS

    这个题目需要注意以下几点: 1)注意界线问题,箱子和人不可以越界. 2)需要判断人是否可以到达人推箱子的指定位置. 3)不可以用箱子作为标记,因为箱子可以走原来走过的地方,我们用箱子和人推箱子的方向来 ...

  4. EasyMvc入门教程-高级控件说明(14)列布局控件

    想起刚做网页时候,看着这么大的屏幕,一直在 想该如何布局呢,后来经过Table布局,Div布局,Border布局,列式布局. 目前EasyMvc主要支持12列的列式布局(手机兼容性好).请看下面的例子 ...

  5. DevExpress控件之LookupEdit,ComboBoxEdit

    ComboBoxEdit 1.  ComBoxEdit没有DisplayMember  和  ValueMember 属性,只能获取显示的值2.当前选定值comboBoxEdit1.Propertie ...

  6. vue.js+koa2项目实战(一)创建项目和elementUI配置

    前端采用vuex+element-ui: 后端采用koa2+restfulAPI+sequlize: (一)项目介绍 宠物社区 1.社区 2.好友 3.说说 4.宠粮 5.健康 (二)项目框架 1.V ...

  7. 数据存储之Archiver、Unarchiver、偏好设置

    数组的归档 对象的归档 NSData多个对象的归档 NSArray多个对象的归档 偏好设置的存储 1.NSString.NSDictionary.NSArray.NSData.NSNumber等类型的 ...

  8. GitHub使用问题(遇到一个记一个)

    1.如何创建文件夹: 如图,Create new files,点击后,若需要创建文件,输入文件名即可,但如果创建的是文件夹,需要在文件夹名后 加一个 '/'斜杠,然后就变成文件夹了

  9. Codeforces 558(C、D、E)总结

    558C 题意:给你n个数,可对每一个数进行操作(乘2或者除以2).求最少的操作使得全部的数都相等. 思路 : dp[ t ] 表示全部的数转化到 t 所需的最少操作, vis[ t ] 表示有多少数 ...

  10. IOS-4-面试题1:黑马程序猿IOS面试题大全

    一.多线程网络 1. 多线程的底层实现? 1> 首先搞清楚什么是线程.什么是多线程 2> Mach是第一个以多线程方式处理任务的系统.因此多线程的底层实现机制是基于Mach的线程 3> ...