1. 程式人生 > >Java 資料結構之List去重

Java 資料結構之List去重

我們可以假設這樣一個流程:從網路上下來一組json資料,不管同步還是非同步,第一個就是想先找個容器把他接下來,順手就把list操起來了,然後就一直add,add,,,但是問題來了,我們不管三期二十七的把資料都接下來了,從來就沒注意資料有重複的怎麼去除呢,遍歷吧,又老土有慢;突然想想如果當初用的是hashset該有多好,那麼hashset有什麼好呢,簡單介紹下要點。
hashset,拆解一下,set說明他來自於集合,集合也就意味著,set裡面沒有重複的元素,hash就代表著hash結構,就是鍵值對,hashset的底層就是通過hashmap實現的,它只是封裝了一個 HashMap 物件來儲存所有的集合元素,所有放入 HashSet 中的集合元素實際上由 HashMap 的 key 來儲存,而 HashMap 的 value 則儲存了一個 PRESENT,它是一個靜態的 Object 物件。 注意哦,這裡的hash
set的hash不光要equals,還要hashcode。
那麼問題來了,我能不能把他們混合在一起來實現我的目的呢,請看程式碼:

List listHasCup=new ArrayList();
        listHasCup.add(1);
        listHasCup.add(2);
        listHasCup.add(3);
        listHasCup.add(1);

        List listNoCup=new ArrayList(new HashSet(listHasCup));

恩,,好了,就是這麼簡單,多看原始碼有好處

相關推薦

Java 資料結構List

我們可以假設這樣一個流程:從網路上下來一組json資料,不管同步還是非同步,第一個就是想先找個容器把他接下來,順手就把list操起來了,然後就一直add,add,,,但是問題來了,我們不管三期二十七的把資料都接下來了,從來就沒注意資料有重複的怎麼去除呢,遍歷吧,

Java常用資料結構List

JDK 11正式釋出了,Oracle終於出了一個長期維護版本,應該將是繼JDK 8之後的一個常規使用版本。 前言 作為Java系開發者對Java集合類的使用應該是較為頻繁的,也是面試中經常會被問的問題。一直想整理一下Java集合和Android中的優化集合類,借這次機會

資料結構List實現類

目錄 1.Arraylist 2.LinkedList 3.Vector 4.Stack 1.Arraylist Arraylist作為常用的資料容器,還是有必要知道一些內部的細節。從執行緒安全方面來看,Arraylist是非執行緒安全,假設10個執行緒同時執行,往Arr

java資料結構快速排序

排序演算法是java資料結構的基礎,也是程式設計師必備的基礎演算法之一,個人認為,瞭解並掌握排序演算法的思想比起單純用程式碼實現功能更有意義,畢竟創造這套演算法的思想才是最高的智慧嘛,下面就來說說關於排序演算法中的比較經典的演算法——快速排序; 先用幾張示意圖來說說快速排序的思想,

java資料結構選擇排序

作為java排序演算法中的一種經典的排序演算法,選擇排序的思想還是比較容易理解的,其主要的排序過程為: 每一趟從待排序記錄中選出最小元素,順序放在已排好序的最後,直到全部記錄排序完畢。也就是:每一趟在n+1(i=1,2,…n)個記錄中選取關鍵字最小記錄作為有序陣列中第i個記錄,基

java資料結構折半查詢

折半查詢,也稱二分法查詢、二分搜尋,是一種在有序陣列中查詢某一特定元素的搜尋演算法,這裡強調有序表明這種演算法的特定使用場景; 搜素過程為,從陣列中間元素開始,如果中間元素正好是要查詢的元素,則搜素過程結束; 如果某一特定元素大於或者小於中間元素,則在陣列大於或小於中間元素的那一半中

java資料結構串的定義

原始碼的github地址,可以下載到本地執行 串的介面定義 package Interface; import impl.ArrayString; /** * 串 是由零個或者多個字元組成的有限序列 * 串中字元的數目n稱為串的長度 零個字元的串稱為空串 它的長度為

java資料結構二叉排序樹

binary sort tree / binary search tree 性質: 1.若左子樹不為空,則左子樹上所有節點的值均小於它的根節點的值。 2.若右子樹不為空,則右子樹上所有節點的值均大於它的根節點的值。 3.左右子樹也是二叉排序樹。 4.沒有值相同的節點

Redis的資料結構List

儲存list:       ArrayList使用陣列方式     LinkedList使用雙向連結方式 這裡主要講如下兩種:      雙向連結表中增加資料     雙向連結表中刪除資料 儲存list常用命令: 兩端新增 兩端彈出 擴充套件命令 lp

Python 6-1.內建資料結構list(基礎篇)

-常見內建資料結構- list 列表 set 集合 dict 字典 tuple 元祖-本章大綱- list(列表): 一組由順序的資料的組合 建立列表 有值列表 無值列表(空列表

java資料結構手動實現單鏈表

package com.example.demo; // 1、定義要儲存物件的類: class Phone {// 此類提供要儲存的資料 private String brand; private double price; public Phon

Java資料結構 AVL樹(平衡二叉樹)簡析

AVL(即平衡二叉樹)樹是帶有平衡條件的二叉查詢樹(二叉查詢樹即左孩子小於根節點,右孩子大於根節點的二叉樹)。一顆AVL樹是其每個節點的左子樹和右子樹的高度最多差 1 的二叉查詢樹(空樹的高度定為-1),只有一個節點的樹高度為0。在高度為h的AVL樹中,最少節點數S(h)=S

java資料結構:ArrayList與LinkedList詳解

前篇博文講到了Java底層怎麼知道ArrayList和LinkedList哪個是隨機訪問哪個是順序訪問的,本片博文主要介紹各自的資料特點。 ArrayList: 從他的這個建構函式我們可以知道他的底層實現就是一個Object物件陣列。 第二個建構函式構造一個空的

Java資料結構哈夫曼樹

import java.util.*; public class TestHuffmanTree { public static void main(String [] args){ HuffmanTree<Integer>hfTree = new Huf

Python基礎資料結構list

本章開啟了專欄,對所學Python內容進行系統性的總結和學習,查缺補漏 希望通過該專欄能夠提升基於Python的開發能力,同時該專欄具有一定的針對性,可以系統整體的學習總結自己需要的東西,以及可以通過這些迅速運用到實踐中。 #!/usr/bi

java資料結構迴圈單鏈表

直接上程式碼舉例說明: public class CircularLinkedList { //java中迴圈單鏈表 private class Node {//建立一個內部節點類 private Node next = null; private Objec

Java資料結構——佇列:通過連結串列和陣列實現

//連結串列實現佇列 class Node<E>{ Node<E> next = null; E data; public Node(E data){ this.data = data; } } public clas

Java資料結構——棧:用連結串列實現

class Node<E>{ E data; Node<E> next = null; public Node(E data){ this.data = data; } } public class ListStack<

Java資料結構——棧:用陣列實現

/** * This is an abstract data type interface for the stack. * This interface includes methods: * {@code pop},{@code push},{@code peek},{@code isEm

Java資料結構——連結串列

import java.lang.Object; import java.util.Dictionary; import java.util.Hashtable; class Node{ Node next = null; int data; public Node(int