1. 程式人生 > >java-集合類(3)-實現比較器(Comparator)介面-LinkedList針對插入刪除、開始處增加元素

java-集合類(3)-實現比較器(Comparator)介面-LinkedList針對插入刪除、開始處增加元素

實現比較器(Comparator)介面
這裡寫圖片描述
實現比較器例子:

package ArrayList;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;

class ArrayListTest {

    public static void printElements(Collection<?> c) {
        Iterator<?> it = c.iterator();
        while
(it.hasNext()) { System.out.println(it.next()); } } public static void main(String[] args) { Student s1 = new Student(5, "xiaoxi"); Student s2 = new Student(2, "xiaohong"); Student s3 = new Student(3, "xiaozhu"); ArrayList<Student> al = new
ArrayList<Student>(); al.add(s1); al.add(s2); al.add(s3); // Collections類進行排序 Collections.sort(al, new Student.StudentComparator()); printElements(al); } } class Student /*implements Comparable<Object> */{ int num; String name; //實現比較器(Comparator)介面。宣告為static 好處是不用產生一個外部類物件再產生一個內部類物件而是直接用外部類名稱來產生一個內部類物件
static class StudentComparator implements Comparator<Student> { @Override public int compare(Student o1, Student o2) { return o1.num > o2.num ? 1 : (o1.num == o2.num ? 0 : -1); } } Student(int num, String name) { this.name = name; this.num = num; } /*@Override public int compareTo(Object arg0) { Student s = (Student) arg0; // 如果當前數比你要比較的數大返回1,小,返回負數 return num > s.num ? 1 : (num == s.num ? 0 : -1); }*/ //格式化輸出格式 public String toString() { return "num=" + num + ", name=" + name; } }

不用上一節的繼承Comparable方式
變式1:

package ArrayList;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;

class ArrayListTest {

    public static void printElements(Collection<?> c) {
        Iterator<?> it = c.iterator();
        while (it.hasNext()) {
            System.out.println(it.next());
        }
    }

    public static void main(String[] args) {
        Student s1 = new Student(5, "xiaoxi");
        Student s2 = new Student(2, "xiaohong");
        Student s3 = new Student(3, "xiaozhu");
        Student s4 = new Student(2, "miaoli");
        ArrayList<Student> al = new ArrayList<Student>();
        al.add(s1);
        al.add(s2);
        al.add(s3);
        al.add(s4);
        // Collections類進行排序,第二個引數是自定義比較器
        Collections.sort(al, new Student.StudentComparator());
        printElements(al);
    }
}

class Student /*implements Comparable<Object> */{
    int num;
    String name;
    //實現比較器(Comparator)介面。宣告為static 好處是不用產生一個外部類物件再產生一個內部類物件而是直接用外部類名稱來產生一個內部類物件
    static class StudentComparator implements Comparator<Student> {

        @Override
        public int compare(Student o1, Student o2) {
            int result = o1.num > o2.num ? 1 : (o1.num == o2.num ? 0 : -1);
            if(result == 0){
                //當我們要比較的學號有一樣的,那麼就比較名字
                result = o1.name.compareTo(o2.name);
            }
            return result;
        }
    }

    Student(int num, String name) {
        this.name = name;
        this.num = num;
    }

    /*@Override
    public int compareTo(Object arg0) {
        Student s = (Student) arg0;
        // 如果當前數比你要比較的數大返回1,小,返回負數
        return num > s.num ? 1 : (num == s.num ? 0 : -1);
    }*/
    //格式化輸出格式
    public String toString() {
        return "num=" + num + ", name=" + name;
    }

}

學號重複比較名字,修改比較器
結果:

num=2, name=miaoli
num=2, name=xiaohong
num=3, name=xiaozhu
num=5, name=xiaoxi

已排序的List中搜索指定的元素:Collectons.binarySearch()。Collections 類主要針對列表操作,arrays類對陣列操作

LinkedList
先引出資料結構:
ArrayList和LinkedList的比較
1、ArrayList底層採用陣列完成,而LinkedList則是以一般的雙向連結串列(double-linked list)完成,其內每個物件除了資料本身外,還有兩個 引用,分別指向前一個元素和後一個元素。
2、如果我們經常在List的開始處增加元素,或者在List中進行插入和刪除操作,我們應該使用LinkedList,否則的話,使用ArrayList將更加快速。

相關推薦

java-集合(3)-實現比較(Comparator)介面-LinkedList針對插入刪除開始增加元素

實現比較器(Comparator)介面 實現比較器例子: package ArrayList; import java.util.ArrayList; import java.util.Arrays; import java.util.Collec

java-集合(二)-迭代-Iterator-Collections自然排序

迭代器方法: 迭代器的工作原理: 注意:迭代器是指向兩個元素之間的位置,如果後面有元素則hasNext()返回真,當我們呼叫next()方法時,返回黃色的元素,如上圖,當我們呼叫remove方法是要先呼叫一次next(),呼叫remove將返回的元素

Java Map集合利用比較Comparator根據Key和Value的排序

TreeMap排序 根據Key進行排序 Map的根據key排序需要用到TreeMap物件,因為它是預設按照升序進行輸出的,可以使用比較器compareTo對它進行降序排序,Comparator可以對集合物件或者陣列進行排序的比較器介面,實現該介面的public compa

Java中List集合排序的方法 比較的使用 根據學生對象數序 語文 英語成績總和進行sort排序

private system.in set swift ringbuf 直觀 turn @override encoding package com.swift; import java.util.ArrayList; import java.util.Collecti

的可比較性Comparable和比較Comparator

string fault nts font nal 返回值 extends 方式 ret 1. Comparable Comparable源碼如下: public interface Comparable<T> { public int compareT

編程開發之--Java集合繼承與實現必備知識

編程開發 next() int end long dha cos dHash IV 1、LinkedHashSet有序鏈式集合 舉例: long startTime=System.currentTimeMillis(); LinkedHashSet oprTypeSe

面試3-java集合總結(Map)

value val tree bubuko 實現 ble info 集合 dha 1.概述: Java 中的map集合使用鍵值對(key-value)來保持數據,其中值(value)可以重復,鍵(key)必須唯一,但最多只能有一個key為空,它的主要實現類有HashMap

Java集合中不實現Cloneable和Serializable原因

tran style 能夠 uid sta 工具 數據 類型 size  Java集合類中不實現Cloneable和Serializable原因      莫名的被問這麽一個問題,也答不上,記錄記錄,為何Java集合類不實現Cloneable和Serializable接口。

Java集合9——PriorityQueue實現

PriorityQueue簡介 優先順序佇列繼承AbstractQueue,實現了java.ioSerializable。 1,成員變數 // 預設容量 private static final int DEFAULT_INITIAL_CAPACITY = 11;

java集合實現簡單的學生資訊管理系統

package jihe; import java.util.Scanner; public class Student { private String sno; private String sname; private int grade; private int age; private S

Java(四)集合框架3.迭代

對List類中常用iterator來輸出 public class IteratorDemo { public static void main(String[] args) { List list=new ArrayList(); list.add

java集合,List和Set比較,各自的子比較(ArrayList,Vector,LinkedList;HashSet,TreeSet),Map集合比較

ArrayList,LinkedList,Vector都屬於ListList:元素是有順序的,元素可以重複因為每個元素有自己的角標(索引)|-- ArrayList:底層是陣列結構,特點是:查詢很快,增刪稍微慢點,執行緒不同步:A執行緒將元素放在索引0位置,CPU排程執行緒A停止,B執行,也將元素放在索引0位

Java集合的總結與比較

Collection├List│├LinkedList│├ArrayList│└Vector│└Stack└Set Map├Hashtable├HashMap└WeakHashMap Collection介面Collection是最基本的集合介面,一個Collection代

Java基礎面試題3-說說你知道的幾個Java集合:listsetqueuemap

關係這張圖簡單揭示了Set、List與Map之間的相對關係。 需要說明下的是,圖中的實現並不指這麼簡單的實現,這個稍後會說到。Collection介面Collection是Java中最基本的集合介面。它描述了一組有關集合操作的方法。int Size(); //集合大小 boo

Java集合是Iterable的實現的原因

介紹 Iterator和Iterable都是介面。 好多集合類,比如List一族或者Set一族,都實現了Iterable介面,這樣物件就可以呼叫iterator()方法。

Java集合ListSetQueueMap實現

1.Collection    Collection最基本的集合介面,一個Collection代表一組Object的集合public interface Collection<E> extends Iterable<E> {任何實現Collection

Java學習筆記】45:優先順序佇列PriorityQueue和比較Comparator

模擬程序排程時的優先數法和簡單時間片輪轉法,前者可以為程序設定以優先數PRIORITY為優先順序,為了更好地併發,每次獲得處理機後優先數減少3而重新選取。 在簡單輪轉法中則僅僅是一個普通佇列,按照FIFO的方式出隊獲得處理機。 如果要使用比較器Compara

Java基礎面試題3-說說你知道的幾個Java集合:listsetmap

關係 這張圖簡單揭示了Set、List與Map之間的相對關係。  需要說明下的是,圖中的實現並不指這麼簡單的實現,這個稍後會說到。 Collection介面 Collection是Java中最基本的集合介面。它描述了一組有關集合操作的方法。 int Size(); /

四,Java集合(2)——Set介面及其實現

1,Set介面及其實現類 Set集合與Collection基本相同,沒有提供任何額外的方法。實際上Set就是Collection,只是行為略有不同。Set集合不允許包含相同的元素,如果試圖把兩個相同的元素加入同一個Set集合中,新增操作失敗,add()方法返回

Java 物件比較 comparator 的作用及用法

排序的演算法是我們最常用的演算法,初學程式,每個人都嘗試過排序。但只是侷限於簡單的排序。 如將下列數字進行排序 1,3,5,8,3,6 於是我們得出結果 1,3,3,5,6,8 將下列字母(字元)進行排序 a,i,e,f,w,s 於是我們得出結果 a,e,f,i,s,w 但