java編程過程中遇到的問題,Java 常見問題總結

 2023-12-25 阅读 29 评论 0

摘要:文章目錄1、Java ==和equals有什么區別?2、Java 的運行機制3、實現線程的兩種方式4、getResource方法5、刪除字符串最后一個字符的幾種方法6、字符串分割[split()]和截取[substring()]7、判斷一個字符串是否包含某個字符8、String方法的總結9、List集合實現倒

文章目錄

    • 1、Java ==和equals有什么區別?
    • 2、Java 的運行機制
    • 3、實現線程的兩種方式
    • 4、getResource方法
    • 5、刪除字符串最后一個字符的幾種方法
    • 6、字符串分割[split()]和截取[substring()]
    • 7、判斷一個字符串是否包含某個字符
    • 8、String方法的總結
    • 9、List集合實現倒倒序排列
    • 10、JDK指定D盤安裝及環境變量配置
    • 11、bug記錄
    • 12、BufferReader中的readLine()方法
    • 13、java.lang.NullPointerException - 如何處理空指針異常
    • 14、報錯:Parameter index out of range (1 > number of parameters, which is 0).
    • 15、字符串怎么轉換成整數
    • 16、 API中文版
    • 17、InputStream.read(),response.getOutputStream(),OutputStream().write【IO流】
    • 18、Map.keySet()、Map.put()、Map.get()【Map類、Set類】
    • 19、Arrays.toString(string[]) + Enumeration.hasMoreElements()【Arrays類、Enumeration接口】
    • 20、如何產生隨機數(Random類)
    • 21、如何實現保留兩位小數 — DecimalFormat

喜歡記得點個贊喲,我是王睿,很高興認識大家!

1、Java ==和equals有什么區別?

java編程過程中遇到的問題?1、概念分析

基本數據類型 == 比較的是值
引用數據類型 == 比較的是內存地址

  • “==” :判斷兩個對象的地址是不是相等。即判斷兩個對象是不是同一個對象。

  • equals():判斷兩個對象的內容是否相等。

java新手編程常見問題、2、代碼分析

"==" 比較基本數據類型
結果:相等

		int num1=20,num2=20;if(num1==num2) System.out.println("相等");else System.out.println("不相等");

"==" 比較引用數據類型
結果:不相等

		String str1="123";String str2 = new String("123");if(str1==str2) System.out.println("相等");else System.out.println("不相等");

equals() 比較引用數據類型
結果:相等

		String str1="123";String str2 = new String("123");if(str1.equals(str2)) System.out.println("相等");else System.out.println("不相等");

2、Java 的運行機制

javaweb個人總結。一丶講之前,我先給大家提個問題:

Java究竟是編譯型語言還是解釋型語言呢?

二丶Java 的運行機制
在這里插入圖片描述

三丶解答提問
答案:Java是解釋性語言

Java課程設計總結。Java虛擬機在這里擔當的是解釋器的角色,他會在程序運行時編譯后的 class 文件解釋成計算機可識別的二進制文件數據后再執行。

3、實現線程的兩種方式

方式一:繼承 Thread 類
繼承 Thread 類創建一個新的線程語法:

public class ThreadTest extends Thread{@Override			public void run() {// TODO Auto-generated method stubsuper.run();}
}

別怕,我們一層層分析。
當我們的自定義類繼承了 Thread 類后,必須要實現run()方法。要算是一個有意義的線程
為什么這么說?
簡單理解:
把線程要做的事情放到run()方法里,當線程啟動后,會直接執行run()方法里面的所有代碼。
好,那么問題來了。

提問:這個run()方法究竟是從哪里來的呢?
問得很好,run() 方法上方有一個@Override 標記,代表它是一個抽象方法,我們都知道子類是必須要繼承父類 Thread的抽象方法的,而 Thread 又實現了Runnable 接口,接口中的方法全都是抽象方法,且不能有方法體,所以說,知道怎么來的了吧!

Java心得?要想讓線程能夠得到執行,我們需要啟動線程,這時候線程才能拿到cpu時間片從而才能啟動
啟動線程語法:

public static void main(String[] args){new ThreadTest().start();
}

例1:

public class ThreadTest extends Thread {		//繼承 Thread 類private int count = 10;			public void run() {					//重寫 run() 方法while(true) {System.out.print(count + " ");		//打印 count 變量if(--count == 0) {					//使 count 變量自減,當自減為 0 時,退出循環return;}}}public static void main(String[] args) {new ThreadTest().start();}}class A extends Thread{@Overridepublic void run() {// TODO Auto-generated method stubsuper.run();}
}

結果為:

10 9 8 7 6 5 4 3 2 1 

重要結論:
如果不調用start() 方法,線程永遠都不會啟動,在主方法沒有調用start()方法之前,Thread 對象只是一個實例,而不是一個真正的線程。

為什么要有第二種啟動線程的方式
學習第二種方式之前,我們需要知道,為什么有1種實現了以后還要搞第二種不是浪費時間嗎,不,開發者可比我們聰明多了,針對不同的情景,我們會使用不同的方式去實現。

具體原因:
如果程序員需要繼承其他類(非Thread 類),因為Java不能支持多繼承,此時還要使當前類實現多線程,那么就可以通過 Runnable 接口來實現。

所以我們知道了第二種方式誕生原因后,就一起來學習吧

方式二:實現 Runnable 接口
語法:

public class Thread extends Object implements Runnable

其實 Thread 類它實現了 Runnable 對象,其中的 run()方法正是對 Runnable 接口中的 run() 方法的具體實現。

實現 Runnable 接口創建線程的流程圖
在這里插入圖片描述

例1:

import java.awt.Container;
import java.net.URL;
import javax.swing.*;public class SwingAndThread extends JFrame {private JLabel jl = new JLabel();		//聲明 JLabel 對象private static Thread t;				//聲明線程對象private int count = 0;					//聲明計數變量private Container container = getContentPane();			//聲明容器public SwingAndThread() {setBounds(300,200,250,100);   	//絕對定位窗體大小與位置container.setLayout(null);      //使窗體不適用任何布局管理器URL url = SwingAndThread.class.getResource("1.png");  //獲取圖片的URLIcon icon = new ImageIcon(url);		//實例化一個 Iconjl.setIcon(icon);    //將圖標放置再標簽中jl.setHorizontalAlignment(SwingConstants.LEFT);		//設置圖片在標簽的最左方jl.setBounds(10, 10, 200, 50);  	//設置標簽的位置與大小jl.setOpaque(true);  	t = new Thread(new Runnable() {				//定義匿名內部類,該類實現 Runnable 接口@Overridepublic void run() {						//重寫run() 方法while(count <= 200) {				//設置循環條件jl.setBounds(count, 10, 200, 50);  //將標簽的橫坐標用變量表示try {Thread.sleep(1000);			//將線程休眠 1000 毫秒}catch (Exception e) {e.printStackTrace();}count += 30;				//使橫坐標每次增加4if(count >= 200) {		//當圖標到達標簽的最右邊時,使其回到標簽最左邊count=10;}}}});t.start();			//啟動線程container.add(jl);	//將標簽添加到容器中setVisible(true);  	//設置窗體可見setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);	//設置窗體關閉方式}public static void main(String[] args) {new SwingAndThread();		//實例化一個 SwingAndThread 對象
//		System.out.println(SwingAndThread.class.getResource(""));}}

運行結果(有水印望各位請體諒理解):

在這里插入圖片描述

注意:這里我要講解下面這行代碼

URL url = SwingAndThread.class.getResource("1.png");

當時我有卡在這里,因為不知道圖片放在哪里,getResource() 方法才能獲取到。后面百度了下,才找到了解決的方法:
可以看到,我在 main() 方法里注釋了一行代碼:

System.out.println(SwingAndThread.class.getResource(""));

這行代碼,是用來獲取當前當前項目的運行路徑的。結果為:
在這里插入圖片描述
所以能夠得出,圖片肯定放在bin目錄下才能獲取到。
在這里插入圖片描述

總結:

  • run() 方法用來存放 線程執行邏輯
  • 只有調用 start() 方法才會產生線程實體,并且運行。

4、getResource方法

參考:原文鏈接

5、刪除字符串最后一個字符的幾種方法

參考:
java刪除字符串最后一個字符的幾種方法

6、字符串分割[split()]和截取[substring()]

字符串分割[split()]和截取[substring()]

7、判斷一個字符串是否包含某個字符

判斷一個字符串是否包含某個字符

8、String方法的總結

String方法的總結

9、List集合實現倒倒序排列

Collections.reverse(dataList);

10、JDK指定D盤安裝及環境變量配置

一丶下載JDK,并將它放到我們D盤的任意一個目錄下(不要放在含有中文的文件目錄)

我的網盤
鏈接:https://pan.baidu.com/s/1qDWpLmYYknlaYrjismk0rA&shfl=sharepset
提取碼:r8mq

二丶配置環境變量

%JAVA_HOME%\bin;%JAVE_HOME%\jre\bin;
在這里插入圖片描述
D:\program\JAVA\jdk\jdk1.8.0_171
在這里插入圖片描述
.;%JAVA_HOME%\lib;%JAVA_HOME%\lib;\tools.jar
在這里插入圖片描述
%JAVA_HOME%\bin;%JAVE_HOME%\jre\bin;
在這里插入圖片描述

三丶檢測是否成功
打開命令:Ctrl+R
1.輸入java,顯示如下內容,表示成功
在這里插入圖片描述
2.java -version
在這里插入圖片描述
到此,就已經完全成功了!

11、bug記錄

今天來跟大家談一下一個,我在做一個新聞項目的時候,遇到的一個很有意思的小Bug

報錯的信息如下:

在這里插入圖片描述

原因分析:

在這里插入圖片描述

解決方法:

在這里插入圖片描述

12、BufferReader中的readLine()方法

BufferReader:字符讀取流緩沖去,在BufferReader中有一個readLine()方法,表示每次讀取一行數據。

readLine()方法返回包含該行內容的字符串,不包含任何行終止符,如果已到達流末尾,則返回 null,即返回的數據為回車符自己的數據,不包括回車符。

readLine()方法的原理:

readLine()方法無論讀取一行數據還是讀取多個字符,最終調用的方法還是讀取字符流(Reader)中的read()方法,一次讀取一個字符。

在這里插入圖片描述


import java.io.FileReader;
import java.io.IOException;/** 模擬實現BufferedReader中的readLine()方法* */
public class MyBufferedReader {private FileReader fr = null;public MyBufferedReader(FileReader fr) {this.fr = fr;}public String readLine() throws IOException {// 定義一個臨時容器,用于存放讀取的數據StringBuilder sb = new StringBuilder();// 定義一個字符,用于判斷是否讀取到文件末尾int ch = 0;while ((ch = fr.read()) != -1) {if (ch == '\r') {continue;}if (ch == '\n') {return sb.toString();}else{sb.append((char)ch);}}//判斷緩沖區是否還有數據,要是有數據就輸出,(這種情況是避免最后一行數據沒有回車符造成數據沒有讀出的問題)if(sb.length() !=0){return sb.toString();}return null;}//定義關閉方法public void close() throws IOException{if(fr != null){fr.close();}}
}

原文鏈接:https://blog.csdn.net/peituanjie/article/details/17421773

13、java.lang.NullPointerException - 如何處理空指針異常

原文:java.lang.NullPointerException - 如何處理空指針異常

14、報錯:Parameter index out of range (1 > number of parameters, which is 0).

這種情況,肯定是某一個步的執行語句下表越界了,注意檢查代碼!
可能是解析結果集的時候,也有可能是存儲值的時候

15、字符串怎么轉換成整數

String s=“123”;
int i;
方法一
第一種方法:i=Integer.parseInt(s);

方法二

第二種方法:i=Integer.valueOf(s).intValue();

16、 API中文版

API中文版

17、InputStream.read(),response.getOutputStream(),OutputStream().write【IO流】

一丶 FileInputStream類:

Class FileInputStream
java.lang.Object
java.io.InputStream
java.io.FileInputStream
All Implemented Interfaces:
Closeable , AutoCloseable

public class FileInputStream
extends InputStream
A FileInputStream從文件系統中的文件獲取輸入字節。 什么文件可用取決于主機環境。
FileInputStream用于讀取諸如圖像數據的原始字節流。 要閱讀字符串,請考慮使用FileReader 。

從以下版本開始:
JDK1.0
另請參見:
File , FileDescriptor , FileOutputStream , Files.newInputStream(java.nio.file.Path, java.nio.file.OpenOption…)

二丶 public FileInputStream(String name)

簡介:

FileInputStream(String name)
通過打開與實際文件的連接來創建一個 FileInputStream ,該文件由文件系統中的路徑名 name命名。

詳情:

構造方法詳細信息
FileInputStream
public FileInputStream(String name)
throws FileNotFoundException
通過打開與實際文件的連接創建一個FileInputStream文件,該文件由文件系統中的路徑名name命名。 創建一個新的FileDescriptor對象來表示此文件連接。
首先,如果有一個安全管理器,它的checkRead方法被調用與name參數作為其參數。

如果命名文件不存在,則是一個目錄而不是常規文件,或者由于某些其他原因無法打開讀取,因此拋出一個FileNotFoundException 。

參數
name - 與系統相關的文件名。
異常
FileNotFoundException - 如果文件不存在,是一個目錄而不是常規文件,或者由于某些其他原因無法打開閱讀。
SecurityException - 如果安全管理器存在,并且其 checkRead方法拒絕對該文件的讀取訪問。
另請參見:
SecurityManager.checkRead(java.lang.String)

三丶 InputStream 類

org.omg.CORBA_2_3.portable
Class InputStream
java.lang.Object
java.io.InputStream
org.omg.CORBA.portable.InputStream
org.omg.CORBA_2_3.portable.InputStream
All Implemented Interfaces:
Closeable , AutoCloseable

public abstract class InputStream
extends InputStream
InputStream提供從流中讀取所有映射的IDL類型。 它擴展了org.omg.CORBA.portable.InputStream。 該類定義了為CORBA 2.3添加的新方法。
從以下版本開始:
JDK1.2
另請參見:
InputStream

四丶 InputStream.read(數組)

得到數組的長度

byte[]  b = new byte[1024];
length= inputStream.read(b)

有值就會返回數組長度,沒值就會返回-1

五丶 OutputStream 類

compact1, compact2, compact3
java.io
Class OutputStream
java.lang.Object
java.io.OutputStream
All Implemented Interfaces:
Closeable , Flushable , AutoCloseable
已知直接子類:
ByteArrayOutputStream , FileOutputStream , FilterOutputStream , ObjectOutputStream , OutputStream , PipedOutputStream

public abstract class OutputStream
extends Object
implements Closeable, Flushable
這個抽象類是表示字節輸出流的所有類的超類。 輸出流接收輸出字節并將其發送到某個接收器。
需要定義OutputStream子類的應用OutputStream必須至少提供一個寫入一個字節輸出的方法。

從以下版本開始:
JDK1.0
另請參見:
BufferedOutputStream , ByteArrayOutputStream , DataOutputStream , FilterOutputStream , InputStream , write(int)
六丶 OutputStream.write()

簡介

void write(byte[] b, int off, int len)
從指定的字節數組寫入 len個字節,從偏移 off開始輸出到此輸出流。

詳情

public void write(byte[] b,
int off,
int len)
throws IOException
從指定的字節數組寫入len字節,從偏移off開始輸出到此輸出流。 write(b, off, len)的一般合同是數組b中的一些字節按順序寫入輸出流; 元素b[off]是寫入的第一個字節, b[off+len-1]是此操作寫入的最后一個字節。
該write的方法OutputStream調用寫出在每個字節中的一個參數的寫入方法。 鼓勵子類覆蓋此方法并提供更有效的實現。

如果b是null ,則拋出NullPointerException 。

如果off為負數,或len為負數,或off+len大于數組b的長度,則拋出IndexOutOfBoundsException 。

參數
b - 數據。
off - 數據中的起始偏移量。
len - 要寫入的字節數。
異常
IOException - 如果發生I / O錯誤。 特別地,如果輸出流關閉,則拋出IOException 。

七丶 OutputStream.close()

簡介

close()
關閉此輸出流并釋放與此流相關聯的任何系統資源。

詳情

public void close()
throws IOException
關閉此輸出流并釋放與此流相關聯的任何系統資源。 close的一般合同是關閉輸出流。 封閉流不能執行輸出操作,無法重新打開。
該close的方法OutputStream什么都不做。

Specified by:
close在界面 Closeable
Specified by:
close在界面 AutoCloseable
異常
IOException - 如果發生I / O錯誤。

八丶 InputStream.close()
同上

九丶 代碼解析

//要下載哪一個文件,獲取文件名String  fileName = request.getParameter("fileName");fileName = new String(fileName.getBytes("iso-8859-1"), "utf-8");System.out.println("fileName:"+fileName);//找到要下載的這個文件路徑 如果項目部署在安裝的Tomcat下//F:\\online\\servlet\\teach\\day01\\soft\\apache-tomcat-7.0.52\\webapps\\Servlet06\\uploadString   path = getServletContext().getRealPath("/upload");System.out.println("path:"+path);System.out.println("File.separator:"+File.separator);//文件名需要根據不同的瀏覽器進行轉碼,否則如果下載的文件,文件名是中文的話,就好出問題//attachment:通知瀏覽器以下載的形勢打開這個頁面response.setHeader("Content-Disposition", "attachment;fileName="+getStr(request,fileName));//輸入流 InputStream  inputStream = new FileInputStream(path+File.separator+fileName);//響應輸出流OutputStream  outputStream = response.getOutputStream();int length = 0;//桶byte[]  b = new byte[1024];while ((length= inputStream.read(b)) != -1) {outputStream.write(b, 0, length);}outputStream.close();inputStream.close();}

18、Map.keySet()、Map.put()、Map.get()【Map類、Set類】

首先,不要慌,大家來看一下API的介紹,最后會用一個代碼例子進行解析:

一丶 Map<K,V>

Interface Map<K,V>
參數類型
K - 由此地圖維護的鍵的類型
V - 映射值的類型
All Known Subinterfaces:
Bindings , ConcurrentMap <K,V>, ConcurrentNavigableMap <K,V>, LogicalMessageContext , MessageContext , NavigableMap <K,V>, SOAPMessageContext , SortedMap <K,V>
所有已知實現類:

AbstractMap , Attributes , AuthProvider , ConcurrentHashMap , ConcurrentSkipListMap , EnumMap , HashMap , Hashtable , IdentityHashMap , LinkedHashMap , PrinterStateReasons , Properties , Provider , RenderingHints , SimpleBindings , TabularDataSupport , TreeMap , UIDefaults , WeakHashMap



public interface Map<K,V>
將鍵映射到值的對象。 地圖不能包含重復的鍵; 每個鍵可以映射到最多一個值。
這個接口取代了Dictionary類,它是一個完全抽象的類而不是接口。

Map界面提供了三個集合視圖 ,允許將映射內容視為一組鍵,值集合或鍵值映射集合。 地圖的順序被定義為其中在地圖上的集合視圖迭代返回元素的順序。 一些地圖實現,如TreeMap課程,對他們的訂單做出了具體的保證; 其他人,像HashMap班,不要。

注意:如果使用可變對象作為地圖鍵,必須非常小心。 如果對象的值以影響equals比較的方式更改,而對象是地圖中的鍵,則不會指定地圖的行為。 這個禁令的一個特殊情況是,地圖不允許將自己包含在內。 雖然地圖可以將其本身作為一個值,但建議您非常小心: equals和hashCode方法在這樣的地圖上已經不太明確。

所有通用映射實現類應提供兩個“標準”構造函數:一個創建空映射的void(無參數)構造函數,以及一個具有類型為Map的單個參數的構造函數 ,它創建一個具有相同鍵值的新映射映射作為參數。 實際上,后一個構造函數允許用戶復制任何地圖,產生所需類的等效地圖。 沒有辦法強制執行此建議(因為接口不能包含構造函數),而JDK中的所有通用映射實現都符合要求。

包含在該界面中的“破壞性”的方法,即,修改其操作地圖的方法,被指定拋出UnsupportedOperationException如果此映射不支持該操作。 如果是這種情況,如果調用對地圖沒有影響,這些方法可能會但不是必須拋出UnsupportedOperationException 。 例如,如果映射映射為“疊加”的地圖為空,則可以在不可修改的映射上調用putAll(Map)方法,但不是必須拋出異常。

一些地圖實現對它們可能包含的鍵和值有限制。 例如,一些實現禁止空鍵和值,有些對鍵的類型有限制。 嘗試插入不合格的鍵或值會拋出未經檢查的異常,通常為NullPointerException或ClassCastException 。 嘗試查詢不合格鍵或值的存在可能會引發異常,或者可能只是返回false; 一些實現將展現出前者的行為,一些實現將展現出后者。 更一般來說,嘗試對不符合條件的密鑰或值的操作,其完成不會導致將不合格元素插入到地圖中可能會導致異常或可能成功執行該選項。 此異常在此接口的規范中標記為“可選”。

Collections Framework接口中的許多方法都是按照equals方法定義的。 例如,對于在本說明書containsKey(Object key)方法表示:“返回true當且僅當此映射包含一個鍵k使得(keynull ? knull : key.equals(k))的映射。” 該規范不應該被解釋為意味著具有非空參數調用key Map.containsKey會導致key.equals(k)被調用的任意鍵k。 實現可以實現優化,從而避免equals的調用,例如,首先比較兩個密鑰的哈希碼。 ( Object.hashCode()規范保證具有不等的哈希碼的兩個對象不能相等。)更一般地,各種Collections Framework接口的實現可以隨意使用底層Object方法的指定行為,無論執行者認為適當。

執行遞歸遍歷地圖的一些地圖操作可能會失敗,并且地圖直接或間接包含自身的自引用實例有異常。 這包括clone() , equals() , hashCode()和toString()方法。 實現可以可選地處理自引用場景,然而大多數當前實現不這樣做。

此接口是成員Java Collections Framework 。

從以下版本開始:
1.2
另請參見:
Collection , List , SortedSet , HashSet , TreeSet , AbstractSet , Collections.singleton(java.lang.Object) , Collections.EMPTY_SET

二丶 Map.keySet()
簡介:

Set keySet()
返回此地圖中包含的鍵的Set視圖。

詳情:

keySet
Set keySet()
返回此地圖中包含的鍵的Set視圖。 該集合由地圖支持,因此對地圖的更改將反映在集合中,反之亦然。 如果在集合中的迭代正在進行中修改映射(除了通過迭代器自己的remove操作),迭代的結果是未定義的。 該組支持元件移除,即從映射中相應的映射,經由Iterator.remove,Set.remove,removeAll,retainAll和clear操作。 它不支持add或addAll操作。
結果
該地圖中包含的鍵的集合視圖

三丶 Map.get()

簡介:

V get(Object key)
返回到指定鍵所映射的值,或 null如果此映射包含該鍵的映射。

詳情:

V get(Object key)
返回到指定鍵所映射的值,或null如果此映射包含該鍵的映射。
更正式地,如果該映射包含從鍵k到值v ,使得(keynull ? knull : key.equals(k)) ,則該方法返回v ; 否則返回null 。 (最多可以有一個這樣的映射。)

如果此映射允許空值,則返回值null并不一定表明該映射不包含該鍵的映射關系; 地圖也可能明確地將密鑰映射到null 。 可以使用containsKey操作來區分這兩種情況。

參數
key - 要返回其關聯值的鍵
結果
指定鍵映射到的值,如果此映射不包含鍵的映射, null
異常
ClassCastException - 如果密鑰是該地圖不合適的類型( optional )
NullPointerException - 如果指定的鍵為空,并且此映射不允許空鍵( optional )

四丶 Map.put()

簡介:

V put(K key, V value)
將指定的值與該映射中的指定鍵相關聯(可選操作)。

詳情:

V put(K key,
V value)
將指定的值與該映射中的指定鍵相關聯(可選操作)。 如果映射先前包含了密鑰的映射,則舊值將被指定的值替換。 (映射m被認為包含關鍵字的映射k當且僅當m.containsKey(k)將返回true )。
參數
key - 指定值與之關聯的鍵
value - 與指定鍵相關聯的值
結果
前一個值與key相關聯 ,或null,如果沒有key的映射。 (A null返回也可以表示該地圖以前關聯的null與key ,如果實現支持null的值)
異常
UnsupportedOperationException -如果 put操作不受此地圖支持
ClassCastException - 如果指定的鍵或值的類阻止它存儲在此映射中
NullPointerException - 如果指定的鍵或值為空,并且此映射不允許空值或值
IllegalArgumentException - 如果指定鍵或值的某些屬性阻止其存儲在此映射中

五丶 Set 類

compact1, compact2, compact3
java.util
Interface Set
參數類型
E - 由此集合維護的元素的類型
All Superinterfaces:
Collection , Iterable
All Known Subinterfaces:
NavigableSet , SortedSet
所有已知實現類:
AbstractSet , ConcurrentHashMap.KeySetView , ConcurrentSkipListSet , CopyOnWriteArraySet , EnumSet , HashSet , JobStateReasons , LinkedHashSet , TreeSet


public interface Set
extends Collection
不包含重復元素的集合。 更正式地,集合不包含一對元素e1和e2 ,使得e1.equals(e2) ,并且最多一個空元素。 正如其名稱所暗示的那樣,這個接口模擬了數學集抽象。
Set接口除了繼承自Collection接口的所有構造函數的合同以及add,equals和hashCode方法的合同外 , 還 增加了其他規定。 其他繼承方法的聲明也包括在這里以方便。 (伴隨這些聲明的規范已經量身定做Set接口,但它們不包含任何附加的規定。)

構造函數的額外規定并不奇怪,所有構造函數都必須創建一個不包含重復元素的集合(如上所定義)。

注意:如果可變對象用作設置元素,則必須非常小心。 如果對象的值以影響equals比較的方式更改,而對象是集合中的元素, 則不指定集合的行為。 這種禁止的一個特殊情況是,一個集合不允許將其本身作為一個元素。

一些集合實現對它們可能包含的元素有限制。 例如,一些實現禁止空元素,有些實現對元素的類型有限制。 嘗試添加不合格元素會引發未經檢查的異常,通常為NullPointerException或ClassCastException 。 嘗試查詢不合格元素的存在可能會引發異常,或者可能只是返回false; 一些實現將展現出前者的行為,一些實現將展現出后者。 更一般來說,嘗試對不符合條件的元素的操作,其完成不會導致不合格元素插入到集合中,可能會導致異常,或者可能會成功執行該選項。 此異常在此接口的規范中標記為“可選”。

此接口是成員Java Collections Framework 。

從以下版本開始:
1.2
另請參見:
Collection , List , SortedSet , HashSet , TreeSet , AbstractSet , Collections.singleton(java.lang.Object) , Collections.EMPTY_SET

六丶 代碼講解:

		Map<String, String[]>  map = request.getParameterMap();//獲取所有的name屬性值//map.keySet()獲取map全部的key值Set<String>   keys=map.keySet();for (String key : keys) {//通過name屬性值,獲取用戶輸入的值String[]  values = map.get(key);System.out.println(key+":"+Arrays.toString(values));}}

結果:

在這里插入圖片描述

在這里插入圖片描述

那么到此,我們的介紹就結束了!相信聰明的你們一定有所理解了,如果不明白代碼的意思就翻到上面去看我的API介紹,好了那么這一章就介紹到這里,感謝大家的收看,我叫王睿,謝謝你們能夠看我的博客,感謝!

19、Arrays.toString(string[]) + Enumeration.hasMoreElements()【Arrays類、Enumeration接口】

首先,不要慌,大家來看一下API的介紹,最后會用一個代碼例子進行解析:

一丶 Enumeration 接口
Interface Enumeration
All Known Subinterfaces:
NamingEnumeration
所有已知實現類:
StringTokenizer

public interface Enumeration
實現枚舉接口的對象生成一系列元素,一次一個。 連續調用nextElement方法返回系列的連續元素。
例如,打印所有元素的一個Vector v :

for (Enumeration e = v.elements(); e.hasMoreElements()😉
System.out.println(e.nextElement());
提供了通過向量的元素,散列表的鍵和哈希表中的值來枚舉方法。 枚舉也用于指定輸入流到SequenceInputStream 。

注意:該接口的功能由Iterator接口復制。 此外,Iterator還添加了一個可選的刪除操作,并具有較短的方法名稱。 新的實現應該考慮使用迭代器優先于枚舉。

從以下版本開始:
JDK1.0
另請參見:
Iterator , SequenceInputStream , nextElement() , Hashtable , Hashtable.elements() , Hashtable.keys() , Vector , Vector.elements()


二丶 Enumeration .hasMoreElements()方法:

boolean hasMoreElements()
測試此枚舉是否包含更多元素。
結果
true當且僅當此枚舉對象至少包含一個要提供的元素時; false否則。


三丶 Enumeration .nextElement()方法:

E nextElement()
如果此枚舉對象至少有一個要提供的元素,則返回此枚舉的下一個元素。
結果
這個枚舉的下一個元素。
異常
NoSuchElementException - 如果不存在更多元素。

四丶 Arrays 類:

Class Arrays
java.lang.Object
java.util.Arrays

public class Arrays
extends Object
該類包含用于操作數組的各種方法(如排序和搜索)。 該類還包含一個靜態工廠,可以將數組視為列表。
如果指定的數組引用為空,則該類中的方法都拋出一個NullPointerException ,除非另有說明。

該類中包含的方法的文檔包括實現的簡要描述 。 這些描述應被視為實施說明 ,而不是說明書的一部分 。 只要規范本身得到遵守,實現者就可以隨意替代其他算法。 (例如,sort(Object[])使用的sort(Object[])不一定是MergeSort,但它必須是穩定的 。)

這個班是Java Collections Framework的成員。

五丶 Arrays.toString(string[])
所有相關方法:

static String toString(boolean[] a)
返回指定數組的內容的字符串表示形式。
static String toString(byte[] a)
返回指定數組的內容的字符串表示形式。
static String toString(char[] a)
返回指定數組的內容的字符串表示形式。
static String toString(double[] a)
返回指定數組的內容的字符串表示形式。
static String toString(float[] a)
返回指定數組的內容的字符串表示形式。
static String toString(int[] a)
返回指定數組的內容的字符串表示形式。
static String toString(long[] a)
返回指定數組的內容的字符串表示形式。
static String toString(Object[] a)
返回指定數組的內容的字符串表示形式。
static String toString(short[] a)
返回指定數組的內容的字符串表示形式。

具體介紹:
toString
public static String toString(long[] a)
返回指定數組的內容的字符串表示形式。 字符串表示由數組元素的列表組成,括在方括號( “[]” )中。 相鄰的元素由字符", " (逗號后跟一個空格)分隔開。 元素被轉換為字符串由String.valueOf(long)。 返回"null"如果a是null。
參數
a - 要返回的字符串表示形式的數組
結果
一個字符串表示 a
從以下版本開始:
1.5
其他的都是以此類推,我就不一一列舉了!相信聰明的你們一定能舉一反三!

六丶 代碼講解:

	//獲取所有的參數名字//得到請求的網頁所有參數Enumeration<String>  names = request.getParameterNames();while (names.hasMoreElements()) {	//如果還有值則繼續循環String name = (String) names.nextElement();	//將參數名一一賦值給name,一次只賦值一個,跟隨循環String[]  values = request.getParameterValues(name);//根據參數名name—key,取出對應的value值System.out.println(name+":"+Arrays.toString(values));//打印結果}

結果:

在這里插入圖片描述

在這里插入圖片描述

那么到此,我們的介紹就結束了!相信聰明的你們一定有所理解了,如果不明白代碼的意思就翻到上面去看我的API介紹,好了那么這一章就介紹到這里,感謝大家的收看,我叫王睿,謝謝你們能夠看我的博客,感謝!

20、如何產生隨機數(Random類)

import java.util.Random;public class Test {public static void main(String[] args){Random rand = new Random();int num = rand.nextInt(10);	表示生成0~9內的隨機數// 100 表示0~99 以此類推
}

21、如何實現保留兩位小數 — DecimalFormat

    float money = 0;String strMoney = "0";DecimalFormat df = new DecimalFormat("#.00");       //  保留兩位小數strMoney = df.format(money);	//	得到的結果是字符串類型

喜歡記得點個贊喲,我是王睿,很高興認識大家!

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/4/194743.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息