Java数据结构与排序
一、引子:想要给ArrayList排序却发现没有排序方法?你有两种选择:
1、换用TreeSet;
2、使用Collection.sort(List<T> list) / Collection.sort(List<T> list, Comparator<? super T> c)方法。
二、展开分析Java的几种主要数据结构及其排序方法:
| LinkedList | 高效操作元素 |
| TreeSet | 不重复,有序 |
| HashSet | 不重复,快速查找 |
| HashMap | NVP(key不能重复),按Hash算法来存储,取出与存入顺序常常不一致 |
| LinkedHashMap | NVP(key不能重复),可记住元素插入的顺序,取出与存入顺序一致 |
PS: HashSet<T>.addAll(ArrayList<T>) 可以这样将所有的元素加进去
三、类型参数与泛型
public class ArrayList<E> extends AbstractList<E>{
public boolean add( E o){
......
}
}
public <T extends Animal> void takeThing(ArrayList<T> list){
.....
}
public void takeThing(ArrayList<? extends Animal> animals){
.....
}
public void takeThing(ArrayList<Animal> list){
.....
}
四、使用Collections.sort(List<T> list)方法
ArrayList<String> songList = new ArrayList<String>();
Collections.sort(songList);
public int compareTo( Song s ){
return title.compareTo( s.getTitle() );
}
//内部类
class ArtistCompare implements Comparator<Song>{
public int compare(Song one, Song two){
return one.getArtist() . compareTo( two. getArtist());
}
}
ArtistCompare artistCompare = new ArtsitCompare();
Collections.sort(songList, artistCompare);
六、想一想,拿着两个对象,有那么多可以比较的方面,你比那个?所以:你以为对象的比较那么简单?
class Song implements Comparable<Song>{
private String title;
public boolean equals(Object o){
Song s = (Song) o;
return getTitle().equals(s.getTitle);
}
public int hashCode(){
return getTitle().hashCode();
}
public String getTitle(){
return this.title;
}
}
七、在介绍了上面对象之间如何比较后,还记得开头提到可以提到ArrayList的Treeset么?
TreeSet<Book> tree = new TreeSet<Book>(bCompare); //bCompare是实现了Comparator接口类的一个对象
八、Map键值对的取得方式
1、传统方法1(转成set后取得)

2、传统方法2(转成set后取得)

3、增强for循环(推荐, jdk1.5以后可使用)
Java数据结构与排序的更多相关文章
- JAVA数据结构--希尔排序
希尔排序通过将比较的全部元素分为几个区域来提升插入排序的性能.这样可以让一个元素可以一次性地朝最终位置前进一大步.然后算法再取越来越小的步长进行排序,算法的最后一步就是普通的插入排序,但是到了这步,需 ...
- JAVA数据结构--选择排序
选择排序(Selection sort)是一种简单直观的排序算法.它的工作原理如下.首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然 ...
- Java数据结构之排序
1.冒泡排序:时间复杂度为O(n2) 假设是由小到大排序:相邻两个数之间进行比较,较大的数在后面.一次比较过后最大的数排在最后面 如:40.8.15.18.12一次排序后为:8.15.18.12.40 ...
- Java数据结构(排序篇)
冒泡排序:是经过n-1趟子排序完毕的,第i趟子排序从第1个数至第n-i个数,若第i个数比后一个数大(则升序,小则降序)则交换两数.大泡在上,小泡在下. 选择排序:每一趟从待排序的数据元素中选出最小(或 ...
- Java数据结构之排序---希尔排序
希尔排序的基本介绍: 希尔排序同之前的插入排序一样,它也是一种插入排序,只不过它是简单插入排序之后的一个优化的排序算法,希尔排序也被称为缩小增量排序. 希尔排序的基本思想: 希尔排序是把数组中给定的元 ...
- Java数据结构之排序---插入排序
插入排序的基本介绍: 插入排序是对想要排序的序列以插入的方式寻找该元素的适当的位置,从而达到排序的目的. 插入排序的基本思想: 把n个待排序的元素看成一个有序表和一个无序表,开始时,有序表只有一个元素 ...
- Java数据结构之排序---选择排序
简单选择排序的介绍: 从给定的序列中,按照指定的规则选出某一个元素,再根据规定交换位置后达到有序的目的. 简单选择排序的基本思想: 假定我们的数组为int [] arr = new int[n],第一 ...
- Java数据结构之排序---冒泡排序
冒泡排序的基本思想: 通过对待排序序列从前到后(从下标小的元素开始),依次比较相邻位置的元素的值,若发现与给定的次序冲突,则交换位置(假设数值大的数放在序列的后面),使数值较大的元素逐渐从前移动到后部 ...
- Java数据结构与排序算法——堆和堆排序
//================================================= // File Name : Heap_demo //--------------------- ...
随机推荐
- 零基础JavaScript编码(三)总结
任务目的 在上一任务基础上继续JavaScript的体验 接触一下JavaScript中的高级选择器 学习JavaScript中的数组对象遍历.读写.排序等操作 学习简单的字符串处理操作 任务描述 参 ...
- 超详细的网络抓包神器 tcpdump 使用指南
原文链接:Tcpdump 示例教程 本文主要内容翻译自<Tcpdump Examples>. tcpdump 是一款强大的网络抓包工具,它使用 libpcap 库来抓取网络数据包,这个库在 ...
- Ajax同步和异步的区别?
今天在code review时候看到同事的代码,用了ajax同步,async:false,如果不设置async参数,默认是true,为异步,异步的情况是比较复杂的,看下同步这个例子: function ...
- scrapy pip中间件个人处理
import pymongo from scrapy.conf import settings import pymysql class Mongodb_Pipeline(object): def _ ...
- 鸟哥的Linux私房菜基础学习篇(第三版)——阅读笔记(二)
第一章 Linux是什么 1.Linux是什么 一套操作系统 早期的Linux是针对386开发的 具有可移植性 2.Unix及Linux的发展史 1973年,Unix诞生,Ritchie等人以C语言写 ...
- postman设置测试环境
有时需要我们在不同的环境下跑相同的测试,就可以通过postman设置环境 展开环境切换下拉列表,点击[Manage Environments]
- mysql实现读写分离
MySQL读写分离概述 1.读写分离介绍 对于目前单机运行MySQL服务.会导致MySQL连接数过多.最终导致mysql的宕机.因此可以使用多台MySQL服务器一起承担压力.考虑到项目中读写比例的不一 ...
- vue基础----组件通信(props,$emit,$attrs,$listeners)
一.父传子,子传孙 1. props 1>在父组件中通过子组件自定义的标签属性来传递数据. 2>在子组件中通过props声明希望用到的数据 <body> <div id= ...
- mysql 多个字段重复记录查询
select * from productstockquantity t where () ORDER BY t.CombinationI
- js 数组 方法
instanceof 检测一个对象是否是数组;(用来对付复杂数据类型;)// 简单数据类型 typeof ;A instanceof B // A是不是B造出来的;例: var arr = [1,2, ...