一、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. DiSC小记

    最近在单位进行管理培训时进行了一个DiSC的心理测试,DiSC是Dominance,influence,Steadiness和Conscientiousness四个英文单词的首字母缩写.这四个单词对应 ...

  2. Android中的多线程断点续传

    Android多线程断点下载的代码流程解析: 运行效果图: 实现流程全解析: Step 1:创建一个用来记录线程下载信息的表 创建数据库表,于是乎我们创建一个数据库的管理器类,继承SQLiteOpen ...

  3. xamarin.ios 本地通知推送

    由于ios10版本以后UILocalNotification被标为弃用了,所以要添加新的本地通知推送功能,下面提供一些代码参考. 一.先在AppDelegate.cs上注册本地通知推送功能. publ ...

  4. CSS 属性选择器的深入挖掘

    CSS 属性选择器,可以通过已经存在的属性名或属性值匹配元素. 属性选择器是在 CSS2 中引入的并且在 CSS3 中得到了很好拓展.本文将会比较全面的介绍属性选择器,尽可能的去挖掘这个选择器在不同场 ...

  5. 卷积 convolution

    这东西大学学过,然后我忘记了,后来就只记得这个名字了. https://zh.wikipedia.org/wiki/%E5%8D%B7%E7%A7%AF http://www.guokr.com/po ...

  6. pyhton3 一些排序算法概括

    1.冒泡算法 import random import datetime def maopao(data): # 检测是否排序完成 for i in range(len(data)-1): flag ...

  7. UVA12096 - The SetStack Computer(set + map映射)

    UVA12096 - The SetStack Computer(set + map映射) 题目链接 题目大意:有五个动作: push : 把一个空集合{}放到栈顶. dup : 把栈顶的集合取出来, ...

  8. linux 静态库使用经验

    在编写程序的过程中,对于一些接口往往抽象成lib库的形式,甚至有些程序只有一个主程序,其他接口的调用都是库的形式存在.较多的使用库会比较利于程序的维护,因为我们的程序都可以被其他的人使用,但是往往库的 ...

  9. php遍历对象属性,可以使用foreach,直接打印出属性

    依然遵循私有属性不可以在外访问,(不能打印出来) 但可以在内部访问这个原则.

  10. EntityFramework 6.0 修改一个已经存在的对象

    public void UpdateObj(someobject obj) { db.Entry(obj).State = EntityState.Modified; db.SaveChanges() ...