一、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. 无法获得VMCI 驱动程序的版本: 句柄无效。

    写在前面 最近在电脑上安装了VMware虚拟机,在安装系统的使用,总提示错误“无法获得VMCI 驱动程序的版本: 句柄无效.”.最近刚买的电脑,也不会是系统的问题吧,为了装个虚机,总不能重装系统吧,没 ...

  2. 【java】Java中十六进制转换 Integer.toHexString()到底做了什么?什么时候会用到它?为什么要用它?byte为什么要&0xff?为什么要和0xff做与运算?

    参考地址:http://www.cnblogs.com/think-in-java/p/5527389.html 参考地址:https://blog.csdn.net/scyatcs/article/ ...

  3. cmd 中键入netstat,net等出现不是内部或外部命令,也不是可运行的程序或批处理文件

    这是环境变量的问题,查下环境变量中path项是否包含%SystemRoot%\system32;再查下%SystemRoot%\system32有没有netstat.exe这个文件

  4. vim批量缩进功能

    注释符号:" :set tabstop=4 设定tab宽度为4个字符 :set shiftwidth=4 设定自动缩进为4个字符 :set expandtab 用space替代tab的输入 ...

  5. VS2010 MFC中 给菜单项添加消息响应函数

    久了没用,居然忘记了该怎样给菜单项添加响应函数了~~~~~~~~T_T 特记于此: 1. 在资源视图的Menu里找到自己要添加的菜单,然后输入菜单项. 2. 右击菜单项选属性,设置Popup为Fals ...

  6. script脚本中写不写$(document).ready(function() {});的差别

    $(document).ready() 里的代码是在页面内容都载入完才运行的,假设把代码直接写到script标签里.当页面载入完这个script标签就会运行里边的代码了,此时假设你标签里运行的代码调用 ...

  7. java类中,成员变量赋值第一个进行,其次是静态构造函数,再次是构造函数

    如题是结论,如果有人问你Java类的成员初始化顺序和初始化块知识就这样回答他.下面是代码: package com.test; public class TestClass{ // 成员变量赋值第一个 ...

  8. F - 概率(经典问题)

    Description Sometimes some mathematical results are hard to believe. One of the common problems is t ...

  9. solor5.4学习笔记

    1.下载地址:http://archive.apache.org/dist/lucene/solr/ 2.与tomcat的整合http://jingyan.baidu.com/article/d807 ...

  10. codeforces 486C Palindrome Transformation 贪心求构造回文

    点击打开链接 C. Palindrome Transformation time limit per test 1 second memory limit per test 256 megabytes ...