Java基础之Comparable接口, Collections类,Iterator接口,泛型(Generic)
一、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)的更多相关文章
- Java基础之Collection与Collections浅析
Java基础之Collection与Collections浅析 一.前言: 位于Java.util包下的Collection与Collections都是Java中重要的工具类,它们都是Java集合框架 ...
- Java基础系列-Comparable和Comparator
原创文章,转载请标注出处:<Java基础系列-Comparable和Comparator> 一.概述 Java中的排序是由Comparable和Comparator这两个接 ...
- Java基础之Comparable与Comparator
Java基础之Comparable与Comparator 一.前言: Java中实现对对象的排序一般情况下主要有以下两种实现方式(万物皆对象嘛): 对象所在的类实现Comparable 接口 定义比较 ...
- Java基础-DBCP连接池(BasicDataSource类)详解
Java基础-DBCP连接池(BasicDataSource类)详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 实际开发中“获得连接”或“释放资源”是非常消耗系统资源的两个过程 ...
- java中有关流操作的类和接口
一.java操作l流有关的类和接口 1.File 文件类 2.RandomAccessFile 随机存储文件类 3.InputStream 字节输入流 4.OutputStream 字节输出流 5.R ...
- Java基础-类加载机制与自定义类Java类加载器(ClassLoader)
Java基础-类加载机制与自定义类Java类加载器(ClassLoader) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 关于类加载器的概念和分类我就不再废话了,因为我在之前的笔 ...
- JAVA面向对象-----接口与类、接口之间的关系
接口与类.接口之间的关系 大家之前都知道类与类之间的关系继承,那么接口与类之间又是怎样子的关系呢? 接口与类之间是实现关系.非抽象类实现接口时,必须把接口里面的所有方法实现.类实现接口用关键字impl ...
- Java基础学习笔记十二 类、抽象类、接口作为方法参数和返回值以及常用API
不同修饰符使用细节 常用来修饰类.方法.变量的修饰符 public 权限修饰符,公共访问, 类,方法,成员变量 protected 权限修饰符,受保护访问, 方法,成员变量 默认什么也不写 也是一种权 ...
- java基础37 集合框架工具类Collections和数组操作工具类Arrays
一.集合框架工具类:Collections 1.1.Collections类的特点 该工具类中所有的方法都是静态的 1.2.Collections类的常用方法 binarySearch(List< ...
随机推荐
- 无法获得VMCI 驱动程序的版本: 句柄无效。
写在前面 最近在电脑上安装了VMware虚拟机,在安装系统的使用,总提示错误“无法获得VMCI 驱动程序的版本: 句柄无效.”.最近刚买的电脑,也不会是系统的问题吧,为了装个虚机,总不能重装系统吧,没 ...
- 【java】Java中十六进制转换 Integer.toHexString()到底做了什么?什么时候会用到它?为什么要用它?byte为什么要&0xff?为什么要和0xff做与运算?
参考地址:http://www.cnblogs.com/think-in-java/p/5527389.html 参考地址:https://blog.csdn.net/scyatcs/article/ ...
- cmd 中键入netstat,net等出现不是内部或外部命令,也不是可运行的程序或批处理文件
这是环境变量的问题,查下环境变量中path项是否包含%SystemRoot%\system32;再查下%SystemRoot%\system32有没有netstat.exe这个文件
- vim批量缩进功能
注释符号:" :set tabstop=4 设定tab宽度为4个字符 :set shiftwidth=4 设定自动缩进为4个字符 :set expandtab 用space替代tab的输入 ...
- VS2010 MFC中 给菜单项添加消息响应函数
久了没用,居然忘记了该怎样给菜单项添加响应函数了~~~~~~~~T_T 特记于此: 1. 在资源视图的Menu里找到自己要添加的菜单,然后输入菜单项. 2. 右击菜单项选属性,设置Popup为Fals ...
- script脚本中写不写$(document).ready(function() {});的差别
$(document).ready() 里的代码是在页面内容都载入完才运行的,假设把代码直接写到script标签里.当页面载入完这个script标签就会运行里边的代码了,此时假设你标签里运行的代码调用 ...
- java类中,成员变量赋值第一个进行,其次是静态构造函数,再次是构造函数
如题是结论,如果有人问你Java类的成员初始化顺序和初始化块知识就这样回答他.下面是代码: package com.test; public class TestClass{ // 成员变量赋值第一个 ...
- F - 概率(经典问题)
Description Sometimes some mathematical results are hard to believe. One of the common problems is t ...
- solor5.4学习笔记
1.下载地址:http://archive.apache.org/dist/lucene/solr/ 2.与tomcat的整合http://jingyan.baidu.com/article/d807 ...
- codeforces 486C Palindrome Transformation 贪心求构造回文
点击打开链接 C. Palindrome Transformation time limit per test 1 second memory limit per test 256 megabytes ...