長集Java
A. java語言使用什麼標准字元集
Java語言所使用的字元集是16位Unicode編碼。另外再介紹一些常見的字元集:
1、最早在dos下寫pascal的時候,就遇到ASCII字元集,後來還是dos下寫c,也是ascii字元集
特點:目前最通用的單位元組編碼字元集
表示:單位元組
最早ascii用7bit表示,總共能表示2^7=128個字元,後來擴展到8bit,就表示2^8=256個字元
2、GB2312又稱為GB2312-80字元集,全稱為《信息交換用漢字編碼字元集·基本集》,由原中國國家標准總局發布,1981年5月1日實施。
特點:當然是能表示99%的中國漢字,還包括拉丁字母、日文假名、希臘字母、俄文字母、漢語拼音符號、漢語注音字母等
表示:雙位元組
3、GBK是漢字編碼標准之一,全稱《漢字內碼擴展規范》,GBK 向下與GB2312編碼兼容,向上支持ISO10646.1國際標准。可以認為GBK是在GB2313基礎上通過內碼擴展出來的一個標准。
特點:完全兼容GB2312標准,支持國際標准ISO/IEC10646-1和國家標准GB13000-1中的全部中日韓漢字,並包含了BIG5編碼中的所有漢字
表示:雙位元組
4、Big5,台灣那邊使用比較多。
5、GB 18030,全稱是GB18030-2000《信息交換用漢字編碼字元集基本集的擴充》,是我國政府於2000年3月17日發布的新的漢字編碼國家標准,2001年8月31日後在中國市場上發布的軟體必須符合本標准。
特點:就是強大。覆蓋中文、日文、朝鮮語和中國少數民族文字。滿足中國大陸、香港、台灣、日本和韓國等東亞地區信息交換多文種、大字量、多用途、統一編碼格式的要求。並且與Unicode 3.0版本兼容,填補Unicode擴展字元字匯「統一漢字擴展A」的內容。並且與以前的國家字元編碼標准(GB2312,GB13000.1)兼容。
表示:單位元組、雙位元組、四位元組三種方式
6、Unicode野心更大(當然有一個國際統一標准當然是好事)
特點:Unicode是一種在計算機上使用的字元編碼。它為每種語言中的每個字元設定了統一並且唯一的二進制編碼,以滿足跨語言、跨平台進行文本轉換、處理的要求。
表示:utf-8,utf-16,utf-32
這里可能有點不好理解,舉個例子
首先,把unicode理解成對所有字元做了一個統一的編號,比如:「字」這個字元,編號是23383,這個是unicode定義的
但是,在計算機中,如何存儲這個編號呢?方式就有很多,存儲unicode的方式,就是utf-8,utf-16,utf-32
23383數值的16進製表示:0x5b57
utf-8用3個位元組來表示漢字,所以utf-8的表示為:0xE5AD97
utf-16用2個位元組來表示漢字,所以utf-16的表示為:0x5b57 剛好和數值是一樣的
utf-32用4個位元組來表示漢字,所以utf-32的表示為:0x00005b57 和數值是一樣的,不過浪費空間
7、再來講講utf-8,它是一種變長的字元集
表示:單位元組來表示字母,雙位元組來表示一些希臘字母,三位元組來表示漢字,當然也有四位元組的
這么做當然會增加表示和識別的難度,不過,可以節省空間。這也是為什麼utf-8在網路編碼中流行的原因。
B. java編程
作用你可以看我個你提供的資料;不按虛擬機是不行的.
一、 什麼是Java虛擬機
Java虛擬機是一個想像中的機器,在實際的計算機上通過軟體模擬來實現。Java虛擬機有自己想像中的硬體,如處理器、堆棧、寄存器等,還具有相應的指令系統。
1.為什麼要使用Java虛擬機?
Java語言的一個非常重要的特點就是與平台的無關性。而使用Java虛擬機是實現這一特點的關鍵。一般的高級語言如果要在不同的平台上運行, 至少需要編譯成不同的目標代碼。而引入Java語言虛擬機後,Java語言在不同平台上運行時不需要重新編譯.
Java虛擬機屏蔽了與具體平台相關的信息,使得Java語言編譯程序只需生成在Java虛擬機上運行的目標代碼(位元組碼),就可以在多種平台上不加修改地運行。Java虛擬機在執行位元組碼時,把位元組碼解釋成具體平台上的機器指令執行。
2.誰需要了解Java虛擬機
Java虛擬機是Java語言底層實現的基礎,對Java語言感興趣的人都應對Java虛擬機有個大概的了解。這有助於理解Java語言的一些性質,也有助於使用Java語言。
對於要在特定平台上實現Java虛擬機的軟體人員,Java語言的編譯器作者以及要用硬體晶元實現Java虛擬機的人來說,則必須深刻理解Java虛擬機的規范。
另外,如果你想擴展 Java語言,或是把其它語言編譯成Java語言的位元組碼,你也需要深入地了解Java虛擬機。
3.Java虛擬機支持的數據類型
Java虛擬機支持Java語言的基本數據類型如下:
byte://1位元組有符號整數的補碼 short://2位元組有符號整數的補碼 int://4位元組有符號整數的補碼 long://8位元組有符號整數的補碼 float://4位元組IEEE754單精度浮點數 double://8位元組IEEE754雙精度浮點數 char://2位元組無符號Unicode字元
幾乎所有的Java類型檢查都是在編譯時完成的。上面列出的原始數據類型的數據在 Java執行時不需要用硬體標記。操作這些原始數據類型數據的位元組碼(指令)本身就已經指出了操作數的數據類型,例如iadd、ladd、fadd和dadd指令都是把兩個數相加,其操作數類型特別是int、long、float和double。
虛擬機沒有給boolean(布爾)類型設置單獨的指令。boolean型的數據是由integer指令, 包括integer返回來處理的。boolean型的數組則是用byte數組來處理的。
虛擬機使用IEEE754格式的浮點數。不支持IEEE格式的較舊的計算機,在運行Java數值計算程序時,可能會非常慢。
虛擬機支持的其它數據類型包括:
object//對一個Javaobject(對象)的4位元組引用 returnAddress//4位元組,用於jsr/ret/jsr-w/ret-w指令
注:Java數組被當作object處理。
虛擬機的規范對於object內部的結構沒有任何特殊的要求。在Sun公司的實現中,對 object的引用是一個句柄,其中包含一對指針:一個指針指向該object的方法表,另一個指向 該object的數據。
用Java虛擬機的位元組碼表示的程序應該遵守類型規定。Java虛擬機的實現應拒絕執行違反了類型規定的位元組碼程序。
Java虛擬機由於位元組碼定義的限制似乎只能運行於32位地址空間的機器上。但是可以創建一個Java虛擬機,它自動地把位元組碼轉換成64位的形式。
從Java虛擬機支持的數據類型可以看出,Java對數據類型的內部格式進行了嚴格規定,這樣使得各種Java虛擬機的實現對數據的解釋是相同的,從而保證了Java的與平台無關性和可移植性。
二、 Java虛擬機體系結構
Java虛擬機由五個部分組成:一組指令集、一組寄存器、一個棧、一個無用單元收集堆(Garbage-collected-heap)、一個方法區域。這五部分是Java虛擬機的邏輯成份,不依賴 任何實現技術或組織方式,但它們的功能必須在真實機器上以某種方式實現。
Java指令集
Java虛擬機支持大約248個位元組碼。每個位元組碼執行一種基本的CPU運算,例如,把一個整數加到寄存器,子程序轉移等。Java指令集相當於Java程序的匯編語言。
Java指令集中的指令包含一個單位元組的操作符,用於指定要執行的操作,還有0個或多個操作數,提供操作所需的參數或數據。許多指令沒有操作數,僅由一個單位元組的操作符構成。虛擬機的內層循環的執行過程如下:
do{ 取一個操作符位元組; 根據操作符的值執行一個動作; }while(程序未結束)
由於指令系統的簡單性,使得虛擬機執行的過程十分簡單,從而有利於提高執行的效率。
指令中操作數的數量和大小是由操作符決定的。如果操作數比一個位元組大,那麼它存儲的順序是高位位元組優先。例如,一個16位的參數存放時佔用兩個位元組,其值為: 第一個位元組*256+第二個位元組
位元組碼指令流一般只是位元組對齊的。指令tableswitch和lookup是例外,在這兩條指令內部 要求強制的4位元組邊界對齊。
寄存器
Java虛擬機的寄存器用於保存機器的運行狀態,與微處理器中的某些專用寄存器類似。 Java虛擬機的寄存器有四種:
pc:Java程序計數器。 optop:指向操作數棧頂端的指針。 frame:指向當前執行方法的執行環境的指針。 vars:指向當前執行方法的局部變數區第一個變數的指針。
Java虛擬機
Java虛擬機是棧式的,它不定義或使用寄存器來傳遞或接受參數,其目的是為了保證指令集的簡潔性和實現時的高效性(特別是對於寄存器數目不多的處理器)。所有寄存器都是32位的。
棧
Java虛擬機的棧有三個區域:局部變數區、運行環境區、操作數區。
局部變數區
每個Java方法使用一個固定大小的局部變數集。它們按照與vars寄存器的字偏移量來定址。局部變數都是32位的。長整數和雙精度浮點數占據了兩個局部變數的空間,卻按照第一個局部變數的索引來定址。(例如,一個具有索引n的局部變數,如果是一個雙精度浮點數,那麼它實際占據了索引 n和n+1所代表的存儲空間。)虛擬機規范並不要求在局部變數中的64位的值是64位對齊的虛擬機提供了把局部變數中的值裝載到操作數棧的指令,也提供了把操作數棧中的值寫入局部變數的指令。
運行環境區
在運行環境中包含的信息用於動態鏈接,正常的方法返回以及異常傳播。
動態鏈接
運行環境包括對指向當前類和當前方法的解釋器符號表的指針,用於支持方法代碼的動態鏈接。方法的class文件代碼在引用要調用的方法和要訪問的變數時使用符號。動態鏈接把符號形式的方法調用翻譯成實際方法調用,裝載必要的類以解釋還沒有定義的符號, 並把變數訪問翻譯成與這些變數運行時的存儲結構相應的偏移地址。動態鏈接方法和變數使得方法中使用的其它類的變化不會影響到本程序的代碼。
正常的方法返回
如果當前方法正常地結束了,在執行了一條具有正確類型的返回指令時,調用的方法會得到一個返回值。
執行環境在正常返回的情況下用於恢復調用者的寄存器,並把調用者的程序計數器增加一個恰當的數值,以跳過已執行過的方法調用指令,然後在調用者的執行環境中繼續執行下去。
異常和錯誤傳播
異常情況在Java中被稱作Error(錯誤)或Exception(異常),是Throwable類的子類,在程序中出錯的原因是:①動態鏈接錯,如無法找到所需的class文件。②運行時錯,如對一個空指針的引用
程序使用了throw語句。
當異常發生時,Java虛擬機採取如下措施:
檢查與當前方法相聯系的catch子句表。每個catch子句包含其有效指令范圍,能夠處理的異常類型,以及處理異常的代碼塊地址。
與異常相匹配的catch子句應該符合下面的條件:造成異常的指令在其指令范圍之內 ,發生的異常類型是其能處理的異常類型的子類型。如果找到了匹配的catch子句,那麼系統轉移到指定的異常處理塊處執行;如果沒有找到異常處理塊,重復尋找匹配的catch子句的過程,直到當前方法的所有嵌套的catch子句都被檢查過。
由於虛擬機從第一個匹配的catch子句處繼續執行,所以catch子句表中的順序是很重要的。因為Java代碼是結構化的,因此總可以把某個方法的所有的異常處理器都按序排列到一個表中,對任意可能的程序計數器的值,都可以用線性的順序找到合適的異常處理塊,以處理在該程序計數器值下發生的異常情況。
如果找不到匹配的catch子句,那麼當前方法得到一個"未截獲異常"的結果並返回到當前方法的調用者,好像異常剛剛在其調用者中發生一樣。如果在調用者中仍然沒有找到相應的異常處理,那麼系 統將調用一個預設的異常處理塊。
操作數棧區
機器指令只從操作數棧中取操作數,對它們進行操作,並把結果返回到棧中。選擇棧結構的原因是:在只有少量寄存器或非通用寄存器的機器(如Intel486)上,也能夠高效地模擬虛擬機的行為。
操作數棧是32位的。它用於給方法傳遞參數,並從方法接收結果,也用於支持操作的參數,並保存操作的結果。
例如,iadd指令將兩個整數相加。相加的兩個整數應該是操作數棧頂的兩個字。這兩個字是由先前的指令壓進堆棧的。這兩個整數將從堆棧彈出、相加,並把結果壓回到操作數棧中。每個原始數據類型都有專門的指令對它們進行必須的操作。每個操作數在棧中需要一個存儲位置,除了long和double型,它們需要兩個位置。
操作數只能被適用於其類型的操作符所操作。例如,壓入兩個int類型的數,如果把它們當作是一個long類型的數則是非法的。在Sun的虛擬機實現中,這個限制由位元組碼驗證器強制實行。但是,有少數操作(操作符pe和swap),用於對運行時數據區進行操作時是不考慮類型的。
無用單元收集堆
Java的堆是一個運行時數據區,類的實例(對象)從中分配空間。Java語言具有無用單元收集能力:它不給程序員顯式釋放對象的能力。Java不規定具體使用的無用單元收集演算法,可以根據系統的需求使用各種各樣的演算法。
方法區
方法區與傳統語言中的編譯後代碼或是Unix進程中的正文段類似。它保存方法代碼 (編譯後的java代碼)和符號表。在當前的Java實現中,方法代碼不包括在無用單元收集堆中,但計劃在將來的版本中實現。每個類文件包含了一個Java類或一個Java界面的編譯後的代碼。可以說類文件是 Java語言的執行代碼文件。為了保證類文件的平台無關性,Java虛擬機規范中對類文件的格式也作了詳細的說明。其具體細節請參考Sun公司的Java虛擬機規范
三、 Java類文件(.class文件)
每個類文件包含了一個Java類或一個Java界面的編譯後的代碼。可以說類文件是Java語言的執行代碼文件。為了保證類文件的平台無關性,Java虛擬機規范中對類文件的格式也作了詳細的說明。其具體細節請參考Sun公司的Java虛擬機規范。
四、 Java晶元
由於Java語言是解釋型語言,在一般的通用處理器上其運行速度比起編譯型語言要慢很多。Sun公司為了進一步推廣Java的應用,推出了Java晶元。這些晶元可以說是Java虛擬機的硬體實現。與通用晶元和解釋器構成的虛擬機不同,Java晶元可以直接執行位元組碼,也就是說,位元組碼就是 Java晶元的指令集。這種用硬體實現的虛擬機當然要比軟體模擬的虛擬機的速度要快得多。
Sun公司計劃推出的Java晶元有三種:picoJava,mi-croJava和ultraJava。
picoJava是一個很小的Java內核晶元,其矽片面積只有25mm2。Sun公司准備向其它公司轉讓,以便其它公司可以定製自己的Java晶元,其低端產品的售價估計不到25美元。
microJava是基於picoJava的微控制器晶元,其晶元面積約為50mm2,用於通信設備和其它嵌入式控制設備。Sun公司希望Java晶元可以成為推動Java發展的主要技術之一。
C. java 實現長連接接受信息,發送信息
對於你這個需求,可以用當前比較熱門的websocket來解決。
websocket可以實現服務端和客戶端全雙工通信,實時性非常好。
你可以自己搭建websocket服務,也可以使用第三方的websocket推送框架,比如【GoEasy】。
【GoEasy】目前支持java、php、python等服務端語言,同時也支持小程序、vue、uniapp等前端技術,使用起來還是非常方便的。
D. 有關Java集合長度比較問題
// 不知道你比較這個長度是用來做什麼的
// 如果是判斷novelList集合沒有數據的話,可以用如下語句:
if(novelList ==null || novelList.isEmpty()){
}
// 如果只想判斷長度可以用如下語句
if(novelList != null && novelList.size()==7){
}
E. java集合問題
Java容器類Collection、List、ArrayList、Vector及map、HashTable、HashMap區別
Collection是List和Set兩個介面的基介面
List在Collection之上增加了"有序"
Set在Collection之上增加了"唯一"
而ArrayList是實現List的類...所以他是有序的.
它里邊存放的元素在排列上存在一定的先後順序
而且ArrayList是採用數組存放元素
另一種List LinkedList採用的則是鏈表。
Collection和Map介面之間的主要區別在於:Collection中存儲了一組對象,而Map存儲關鍵字/值對。
在Map對象中,每一個關鍵字最多有一個關聯的值。
Map:不能包括兩個相同的鍵,一個鍵最多能綁定一個值。null可以作為鍵,這樣的鍵只有一個;可以有一個或多個鍵所對應的
值為null。當get()方法返回null值時,即可以表示Map中沒有該鍵,也可以表示該鍵所對應的值為null。因此,在Map中不能由get()方法來判斷Map中是否存在某個鍵,而應該用containsKey()方法來判斷。
繼承Map的類有:HashMap,HashTable
HashMap:Map的實現類,預設情況下是非同步的,可以通過Map Collections.synchronizedMap(Map m)來達到線程同步
HashTable:Dictionary的子類,確省是線程同步的。不允許關鍵字或值為null
當元素的順序很重要時選用TreeMap,當元素不必以特定的順序進行存儲時,使用HashMap。Hashtable的使用不被推薦,因為HashMap提供了所有類似的功能,並且速度更快。當你需要在多線程環境下使用時,HashMap也可以轉換為同步的。
為什麼要使用集合類
當你事先不知道要存放數據的個數,或者你需要一種比數組下標存取機制更靈活的方法時,你就需要用到集合類。
理解集合類
集合類存放於java.util包中。
集合類存放的都是對象的引用,而非對象本身,出於表達上的便利,我們稱集合中的對象就是指集合中對象的引用(reference)。
集合類型主要有3種:set(集)、list(列表)和map(映射)。
(1)集
集(set)是最簡單的一種集合,它的對象不按特定方式排序,只是簡單的把對象加入集合中,就像往口袋裡放東西。
對集中成員的訪問和操作是通過集中對象的引用進行的,所以集中不能有重復對象。
集也有多種變體,可以實現排序等功能,如TreeSet,它把對象添加到集中的操作將變為按照某種比較規則將其插入到有序的對象序列中。它實現的是SortedSet介面,也就是加入了對象比較的方法。通過對集中的對象迭代,我們可以得到一個升序的對象集合。
(2)列表
列表的主要特徵是其對象以線性方式存儲,沒有特定順序,只有一個開頭和一個結尾,當然,它與根本沒有順序的集是不同的。
列表在數據結構中分別表現為:數組和向量、鏈表、堆棧、隊列。
關於實現列表的集合類,是我們日常工作中經常用到的,將在後邊的筆記詳細介紹。
(3)映射
映射與集或列表有明顯區別,映射中每個項都是成對的。映射中存儲的每個對象都有一個相關的關鍵字(Key)對象,關鍵字決定了對象在映射中的存儲位置,檢索對象時必須提供相應的關鍵字,就像在字典中查單詞一樣。關鍵字應該是唯一的。
關鍵字本身並不能決定對象的存儲位置,它需要對過一種散列(hashing)技術來處理,產生一個被稱作散列碼(hash code)的整數值,散列碼通常用作一個偏置量,該偏置量是相對於分配給映射的內存區域起始位置的,由此確定關鍵字/對象對的存儲位置。理想情況下,散列處理應該產生給定范圍內均勻分布的值,而且每個關鍵字應得到不同的散列碼。
集合類簡介
java.util中共有13個類可用於管理集合對象,它們支持集、列表或映射等集合,以下是這些類的簡單介紹
集:
HashSet: 使用HashMap的一個集的實現。雖然集定義成無序,但必須存在某種方法能相當高效地找到一個對象。使用一個HashMap對象實現集的存儲和檢索操作是在固定時間內實現的.
TreeSet: 在集中以升序對對象排序的集的實現。這意味著從一個TreeSet對象獲得第一個迭代器將按升序提供對象。TreeSet類使用了一個TreeMap.
列表:
Vector: 實現一個類似數組一樣的表,自動增加容量來容納你所需的元素。使用下標存儲和檢索對象就象在一個標準的數組中一樣。你也可以用一個迭代器從一個Vector中檢索對象。Vector是唯一的同步容器類??當兩個或多個線程同時訪問時也是性能良好的。(同步即同時只能一個進程訪問,其他等待)
Stack: 這個類從Vector派生而來,並且增加了方法實現棧??一種後進先出的存儲結構。
LinkedList: 實現一個鏈表。由這個類定義的鏈表也可以像棧或隊列一樣被使用。
ArrayList: 實現一個數組,它的規模可變並且能像鏈表一樣被訪問。它提供的功能類似Vector類但不同步。
映射:
HashTable: 實現一個映象,所有的鍵必須非空。為了能高效的工作,定義鍵的類必須實現hashcode()方法和equal()方法。這個類是前面java實現的一個繼承,並且通常能在實現映象的其他類中更好的使用。
HashMap: 實現一個映象,允許存儲空對象,而且允許鍵是空(由於鍵必須是唯一的,當然只能有一個)。
WeakHashMap: 實現這樣一個映象:通常如果一個鍵對一個對象而言不再被引用,鍵/對象對將被舍棄。這與HashMap形成對照,映象中的鍵維持鍵/對象對的生命周期,盡管使用映象的程序不再有對鍵的引用,並且因此不能檢索對象。
TreeMap: 實現這樣一個映象,對象是按鍵升序排列的。
下圖是集合類所實現的介面之間的關系:
Set和List都是由公共介面Collection擴展而來,所以它們都可以使用一個類型為Collection的變數來引用。這就意味著任何列表或集構成的集合都可以用這種方式引用,只有映射類除外(但也不是完全排除在外,因為可以從映射獲得一個列表。)所以說,把一個列表或集傳遞給方法的標准途徑是使用Collection類型的參數。
<hr>
List介面
List是有序的Collection,使用此介面能夠精確的控制每個元素插入的位置。用戶能夠使用索引(元素在List中的位置,類似於數組下標)來訪問List中的元素,這類似於Java的數組。
和下面要提到的Set不同,List允許有相同的元素。
除了具有Collection介面必備的iterator()方法外,List還提供一個listIterator()方法,返回一個ListIterator介面,和標準的Iterator介面相比,ListIterator多了一些add()之類的方法,允許添加,刪除,設定元素,還能向前或向後遍歷。
實現List介面的常用類有LinkedList,ArrayList,Vector和Stack。
ArrayList類
ArrayList實現了可變大小的數組。它允許所有元素,包括null。ArrayList沒有同步。
size,isEmpty,get,set方法運行時間為常數。但是add方法開銷為分攤的常數,添加n個元素需要O(n)的時間。其他的方法運行時間為線性。
每個ArrayList實例都有一個容量(Capacity),即用於存儲元素的數組的大小。這個容量可隨著不斷添加新元素而自動增加,但是增長演算法並沒有定義。當需要插入大量元素時,在插入前可以調用ensureCapacity方法來增加ArrayList的容量以提高插入效率。
和LinkedList一樣,ArrayList也是非同步的(unsynchronized)。
Map介面
請注意,Map沒有繼承Collection介面,Map提供key到value的映射。一個Map中不能包含相同的key,每個key只能映射一個value。Map介面提供3種集合的視圖,Map的內容可以被當作一組key集合,一組value集合,或者一組key-value映射。
HashMap類
HashMap和Hashtable類似,不同之處在於HashMap是非同步的,並且允許null,即null value和null key。,但是將HashMap視為Collection時(values()方法可返回Collection),其迭代子操作時間開銷和HashMap的容量成比例。因此,如果迭代操作的性能相當重要的話,不要將HashMap的初始化容量設得過高,或者load factor過低。
----------------------------------------------------------------------------
1.
List是介面,List特性就是有序,會確保以一定的順序保存元素.
ArrayList是它的實現類,是一個用數組實現的List.
Map是介面,Map特性就是根據一個對象查找對象.
HashMap是它的實現類,HashMap用hash表實現的Map,就是利用對象的hashcode(hashcode()是Object的方法)進行快速散列查找.(關於散列查找,可以參看<<數據結構>>)
2.
一般情況下,如果沒有必要,推薦代碼只同List,Map介面打交道.
比如:List list = new ArrayList();
這樣做的原因是list就相當於是一個泛型的實現,如果想改變list的類型,只需要:
List list = new LinkedList();//LinkedList也是List的實現類,也是ArrayList的兄弟類
這樣,就不需要修改其它代碼,這就是介面編程的優雅之處.
另外的例子就是,在類的方法中,如下聲明:
private void doMyAction(List list){}
這樣這個方法能處理所有實現了List介面的類,一定程度上實現了泛型函數.
3.
如果開發的時候覺得ArrayList,HashMap的性能不能滿足你的需要,可以通過實現List,Map(或者Collection)來定製你的自定義類
本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/xczheng/archive/2009/02/25/3936474.aspx
F. Java語言所使用的字元集是什麼
Java語言所使用的字元集是16位Unicode編碼。另外再介紹一些常見的字元集:
1、最早在dos下寫pascal的時候,就遇到ASCII字元集,後來還是dos下寫c,也是ascii字元集
特點:目前最通用的單位元組編碼字元集
表示:單位元組
最早ascii用7bit表示,總共能表示2^7=128個字元,後來擴展到8bit,就表示2^8=256個字元
2、GB2312又稱為GB2312-80字元集,全稱為《信息交換用漢字編碼字元集·基本集》,由原中國國家標准總局發布,1981年5月1日實施。
特點:當然是能表示99%的中國漢字,還包括拉丁字母、日文假名、希臘字母、俄文字母、漢語拼音符號、漢語注音字母等
表示:雙位元組
3、GBK是漢字編碼標准之一,全稱《漢字內碼擴展規范》,GBK 向下與GB2312編碼兼容,向上支持ISO10646.1國際標准。可以認為GBK是在GB2313基礎上通過內碼擴展出來的一個標准。
特點:完全兼容GB2312標准,支持國際標准ISO/IEC10646-1和國家標准GB13000-1中的全部中日韓漢字,並包含了BIG5編碼中的所有漢字
表示:雙位元組
4、Big5,台灣那邊使用比較多。
5、GB 18030,全稱是GB18030-2000《信息交換用漢字編碼字元集基本集的擴充》,是我國政府於2000年3月17日發布的新的漢字編碼國家標准,2001年8月31日後在中國市場上發布的軟體必須符合本標准。
特點:就是強大。覆蓋中文、日文、朝鮮語和中國少數民族文字。滿足中國大陸、香港、台灣、日本和韓國等東亞地區信息交換多文種、大字量、多用途、統一編碼格式的要求。並且與Unicode 3.0版本兼容,填補Unicode擴展字元字匯「統一漢字擴展A」的內容。並且與以前的國家字元編碼標准(GB2312,GB13000.1)兼容。
表示:單位元組、雙位元組、四位元組三種方式
6、Unicode野心更大(當然有一個國際統一標准當然是好事)
特點:Unicode是一種在計算機上使用的字元編碼。它為每種語言中的每個字元設定了統一並且唯一的二進制編碼,以滿足跨語言、跨平台進行文本轉換、處理的要求。
表示:utf-8,utf-16,utf-32
這里可能有點不好理解,舉個例子
首先,把unicode理解成對所有字元做了一個統一的編號,比如:「字」這個字元,編號是23383,這個是unicode定義的
但是,在計算機中,如何存儲這個編號呢?方式就有很多,存儲unicode的方式,就是utf-8,utf-16,utf-32
23383數值的16進製表示:0x5b57
utf-8用3個位元組來表示漢字,所以utf-8的表示為:0xE5AD97
utf-16用2個位元組來表示漢字,所以utf-16的表示為:0x5b57 剛好和數值是一樣的
utf-32用4個位元組來表示漢字,所以utf-32的表示為:0x00005b57 和數值是一樣的,不過浪費空間
7、再來講講utf-8,它是一種變長的字元集
表示:單位元組來表示字母,雙位元組來表示一些希臘字母,三位元組來表示漢字,當然也有四位元組的
這么做當然會增加表示和識別的難度,不過,可以節省空間。這也是為什麼utf-8在網路編碼中流行的原因。
G. java中集合長度的問題
不算,一開始就有的那個是容量。
像ArrayList , HashMap 多數集合的容量都是自動擴展的。
長度就是size,大小,是指包含的對象數量。
H. java集合長度
是從0還是計數的
比如說 有6條信息
list.size()< 6 但是 list它是從0開始計數 也就是0,1,2,3,4,5
如果你systen.out.println(list.size()) 你看看會是5還是6
空集合列印出來應該是null
I. java有哪些集合
Java集合主要有四種,分別為:List列表、Queue隊列、Set集合、Map映射。
List列表:有序的,可重復的;
Queue隊列:有序,可重復的;
Set集合:不可重復;
Map映射:無序,鍵唯一,值不唯一。
J. java 集合類的意義是什麼
簡單的說,集合類有list列,set集和map映射三大類!
Set(集):集合中的對象無排列順序,並且沒有重復的對象.
List(隊列):集合中的對象按照索引的順序排列,可以有重復的對象。
Map(映射):集合中的每一個元素都是一對一對的,包括一個key對象,一個Value對象(一個Key指向一個Value).集合中沒有重復的key對象,但是vaulue對象可以重復.
這三個介面下有幾個方法
你要用的時候需要importjava.util.*;就行
Setset=newHashSet();//定義集
調用就是set.add();什麼的各種方法。
Arraylistalist=newArraylist();//定義列這個比較常用的像數組,但不像數組那麼局限
HashMapmap=newHashMap();//定義映射
參考:http://www.sunxin.org/forum/thread/19837.html?page=1