jdk順序表筆記

来源:http://www.cnblogs.com/wewill/archive/2016/10/26/6001567.html
-Advertisement-
Play Games

一、AbstractCollection 提供了集合的最大實現 繼承該類,必須實現size()和iterator(),因為該類操作集合都是通過iterator 二、fail-fast策略 該策略在集合框架中多次被應用 一種多線程對同一集合操作的保護措施,確保操作目標沒有被其他線程操作過,與cas思想 ...


一、AbstractCollection

提供了集合的最大實現 繼承該類,必須實現size()和iterator(),因為該類操作集合都是通過iterator

二、fail-fast策略

該策略在集合框架中多次被應用 一種多線程對同一集合操作的保護措施,確保操作目標沒有被其他線程操作過,與cas思想有異曲同工之處 具體在集合中的實現: 定義一個全局變數modCount,表示集合被修改的次數 每次進行動態操作的時候,modCount++ 在Iterator中定義一個全局變數expectedModCount, 每次操作Iterator的時候都會比較modCount和expectedModCount,相等則認為這個集合沒有被併發修改,否則會拋出ConcurrentModificationException 所以只要有modCount這個變數的,都是線程不安全的,這種集合最好使用迭代器,因為直接操作不會檢查集合有沒有被併發修改 使用volatile修飾modCount 被volatile修飾的變數,程式中的每次引用,處理器都會從記憶體(共用記憶體)中去讀值,而不是從寄存器(線程獨有記憶體)中獲取 這使得fail-fast策略更可靠

三、AbstractList

提供了順序表的最大實現 該類實現了迭代器 繼承該類,需要實現get方法,因為迭代器的next是調用了get

四、ArrayList

1.初始容量為10

構造器(集合)和addAll,是深拷貝,因為調的是AbstractCollection.toArray()---->Arrays.copyOf()------>System.arraycopy()

2.多用會用trimToSize

因為順序表一建立的時候,就會創建一個初始大小的數組,這樣就會有空餘的位置,調用這個方法可以把多餘的位置清理,節約空間 實際長度是存儲數組的length,不是全局變數size,size意味著有多個個元素是有數據的

3.擴展容量

預設是增大一半的空間,要考慮int溢出(溢出<0),以及虛擬機的最大記憶體 必用ensureCapacity(int minSize),需要增大容量的時候,都要調用 都要確認這個容量是否支持,不支持則會擴展容量 防止數組越界

4.toArray,clone都是深度拷貝

5.維護的數組是沒有泛型的,當需要獲取元素的時候,才去轉型

6.對於動態操作

並沒有像通常數據結構的書那樣子,要移動操作元素後續的節點,而是直接拷貝一份

7.養成好習慣

動態操作了之後,不單單隻是移動指針,要將不存在的元素位置設置為null,目的是為了讓垃圾收集器工作

8.提供一些安全性低,但是快速的private方法

比如remove(Obj),獲取下標了之後,就可以調用一個fastRemove(index),不需要二次比較值

9.subList(from,to)

返回的是該集合的視圖,視圖是淺拷貝,會直接操作該集合   a192136220-94766

查看原文:http://blog.zswlib.com/2016/10/26/jdk%e9%a1%ba%e5%ba%8f%e8%a1%a8%e7%ac%94%e8%ae%b0/


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 有關LZF演算法的相關解析文檔比較少,但是Apple對LZF的開源,可以讓我們對該演算法進行一個簡單的解析。LZFSE 基於 Lempel-Ziv ,並使用了有限狀態熵編碼。LZF採用類似lz77和lzss的混合編碼。使用3種“起始標記”來代表每段輸出的數據串。 接下來看一下開源的LZF演算法的實現源碼。 ...
  • IOC模式: 1.IOC模式:通過一個播放器的例子來說明什麼是依賴,依賴倒置,控制反轉(IOC),最後實現依賴註入。通過Unity實現IOC容器 http://www.cnblogs.com/qqlin/archive/2012/10/09/2707075.html 2.深入理解DIP、IoC、DI ...
  • 做開發的,可能都做過信息採集相關的程式,史林楓也經常做一些數據採集或某些網站的業務辦理自動化操作軟體。 獲取目標網頁的信息很簡單,使用網路編程,利用HttpWebResponse、HttpWebRequest和WebClient就可以了。 複雜的是獲取網頁內容後,需要對關鍵信息進行過濾,最初史林楓主 ...
  • 在64位的Windows操作系統中,為了相容32位程式的運行,64位的Windows操作系統採用重定向機制。目的是為了能讓32位程式在64位的操作系統不僅能操作關鍵文件文夾和關鍵的註冊表並且又要避免與64位程式衝突 在64位的Windows操作系統上,可以運行32位的應用程式,這是通過一個叫做WOW ...
  • 調用DelectDir方法前可以先判斷文件夾是否存在 原文地址:http://www.cnblogs.com/iamlucky/p/5997865.html ...
  • 為滿足性能、擴展性、業務快速交付等方面的要求,新.net core雲開發框架改造的主要思想是:高內聚、低耦合,即進一步實現縱向和橫向分層,提高可伸縮性和可擴展性,實現彈性部署: 採用領域驅動設計進行架構橫向分層,同時業務功能縱向分割 在代碼和資料庫設計上充分考慮雲架構要素,提高可伸縮性、可擴展性、高 ...
  • querystring處理參數的小利器。 下麵是querystring的四個方法。 ①stringify:將一個參數對象序列化為一個字元串 eg: querystring.stringify({name:'jenny',course:['js','node'],from:''}); 輸出:'name ...
  • 一。開發的準備 1.jdk的安裝(window) (1)根據自己的電腦下載對應的jdk,並安裝 (推薦安裝在沒有中文的目錄中)。 網站 http://www.oracle.com/technetwork/cn/java/javase/downloads/jdk7-downloads-1880260. ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...