java里parse方法,java contains_Java開發人員犯的十大錯誤,你犯幾個?

 2023-10-20 阅读 33 评论 0

摘要:本篇為譯文:這個列表總結了Java開發人員經常犯的十大錯誤。1.將Array轉換為ArrayList若要將數組轉換為ArrayList開發人員經常這樣做:List<String> list = Arrays.asList(arr);java里parse方法、Arrays.asList()將返回ArrayList中的私有靜態類。Arrays

本篇為譯文:

這個列表總結了Java開發人員經常犯的十大錯誤。

1.將Array轉換為ArrayList

若要將數組轉換為ArrayList開發人員經常這樣做:

List<String> list = Arrays.asList(arr);

java里parse方法、Arrays.asList()將返回ArrayList中的私有靜態類。Arrays,這不是java.util.ArrayList班級,等級。這個java.util.Arrays.ArrayListset(),get(),contains()方法,但沒有任何添加元素的方法,因此其大小是固定的。創造一個真實的ArrayList,你應該做:

ArrayList<String> arrayList = new ArrayList<String>(Arrays.asList(arr));

的構造者ArrayList可以接受集合類型,這也是java.util.Arrays.ArrayList.

#2.檢查Array是否包含一個值

開發人員經常這樣做:

Set<String> set = new HashSet<String>(Arrays.asList(arr));
return set.contains(targetValue);

java安裝不了?代碼可以工作,但不需要將列表轉換為先設置。將列表轉換為集合需要額外的時間。它可以簡單到:

Arrays.asList(arr).contains(targetValue);

for(String s: arr){if(s.equals(targetValue))return true;
}
return false;

第一個比第二個更易讀。

#3.從循環中的列表中刪除元素

java substring、考慮以下代碼,它在迭代期間刪除元素:

ArrayList<String> list = new ArrayList<String>(Arrays.asList("a", "b", "c", "d"));
for (int i = 0; i < list.size(); i++) {list.remove(i);
}
System.out.println(list);

產出如下:

[b, d]

這種方法存在一個嚴重的問題。刪除元素時,列表的大小會縮小,索引也會發生變化。因此,如果要通過使用索引刪除循環中的多個元素,這將無法正常工作。

您可能知道使用迭代器是刪除循環中元素的正確方法,而且您知道在Java中foreach循環的工作方式類似于迭代器,但實際上并非如此。考慮以下代碼:

ArrayList<String> list = new ArrayList<String>(Arrays.asList("a", "b", "c", "d"));for (String s : list) {if (s.equals("a"))list.remove(s);
}

Java安裝錯誤、它會被扔出去ConcurrentModificationException.

相反,以下內容是可以的:

ArrayList<String> list = new ArrayList<String>(Arrays.asList("a", "b", "c", "d"));
Iterator<String> iter = list.iterator();
while (iter.hasNext()) {String s = iter.next();if (s.equals("a")) {iter.remove();}
}

.next()必須在此之前調用.remove()..在foreach循環中,編譯器將使.next()在移除元素操作后調用,這將導致ConcurrentModificationException..您可能想看看ArrayList.iterator().

#4.Hashtable與HashMap

java報錯、根據算法中的約定,Hashtable是數據結構的名稱。但是在Java中,數據結構的名稱是HashMap..其中一個關鍵的區別是HashtableHashMap那是Hashtable是同步的。所以很多時候你不需要Hashtable,相反HashMap應該用。

HashMap與Treemap vs Hashtable與LinkedHashMap

#5使用原料類型的收藏

在爪哇,原始類型無界通配符類型很容易混合在一起。舉個例子,Set是原始類型,而Set<?>是無界通配符類型。

java錯誤。考慮使用原始類型的下列代碼List作為參數:

public static void add(List list, Object o){list.add(o);
}
public static void main(String[] args){List<String> list = new ArrayList<String>();add(list, 10);String s = list.get(0);
}

此代碼將引發異常:

Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
at ...

使用原始類型集合是危險的,因為原始類型集合跳過泛型類型檢查,并且不安全。.之間有很大的區別Set,Set<?>,和Set<Object>..檢查

原始類型與無界通配符和類型擦除.

java?#6.訪問級別

開發人員經常在類字段中使用public。通過直接引用可以很容易地獲得字段值,但這是一個非常糟糕的設計。經驗法則是為成員提供盡可能低的訪問級別。

公共、默認、受保護和私有的

#7.ArrayList訴LinkedList

java中的contains。當開發人員不知道ArrayListLinkedList,他們經常使用ArrayList因為它看起來很眼熟。然而,它們之間存在著巨大的性能差異。總之,LinkedList如果有大量的添加/刪除操作,并且沒有很多隨機訪問操作,則應優先考慮。檢查ArrayListv.V.LinkedList來獲得更多關于他們的表現的信息,如果這對你來說是新的話。

#8.可變與不可變

不可變對象具有許多優點,如簡單性、安全性等。但是它需要為每個不同的值單獨設置一個對象,過多的對象可能會導致垃圾收集的成本過高。在可變和不可變之間應該有一個平衡。

通常,可變對象用于避免產生過多的中間對象。一個典型的例子是連接大量的字符串。如果使用不可變字符串,則會立即生成許多符合垃圾回收條件的對象。這浪費了CPU的時間和精力,使用了一個可變的對象-正確的解決方案。StringBuilder).

String result="";
for(String s: arr){result = result + s;
}

javalistcontains,在其他情況下,可變對象是可取的。例如,將可變對象傳遞到方法中,可以收集多個結果,而不需要跳過太多的語法圈。另一個例子是排序和過濾:當然,您可以創建一個獲取原始集合并返回排序集合的方法,但是對于較大的集合來說,這將變得非常浪費。(來自達斯賓肯萊的回答關于堆棧溢出)

#9.SuperandSub的構造函數

6175ec002835c9615efba687053945c6.png

發生此編譯錯誤是因為默認超級構造函數未定義。在Java中,如果類沒有定義構造函數,編譯器將在默認情況下為類插入默認的無參數構造函數。如果在Superclass中定義了構造函數,在本例中是Super(String S),編譯器將不會插入默認的無參數構造函數。以上是超級班的情況。

子類的構造函數,無論是-參數還是非參數,都將調用無參數超級構造函數。由于編譯器試圖將Super()插入到Sub類中的2個構造函數,但是沒有定義Super默認構造函數,所以編譯器會報告錯誤消息。

要解決這個問題,只需向Superclass添加一個Super()構造函數,如下所示

public Super(){System.out.println("Super");
}

,或2)刪除自定義的超級構造函數,或3)添加super(value)給分建筑工人。

#10.“還是建筑工人?

字符串可以通過兩種方式創建:

//1. use double quotes
String x = "abc";
//2. use constructor
String y = new String("abc");

有什么關系?

下面的例子可以提供一個快速的答案:

String a = "abcd";
String b = "abcd";
System.out.println(a == b);  // True
System.out.println(a.equals(b)); // TrueString c = new String("abcd");
String d = new String("abcd");
System.out.println(c == d);  // False
System.out.println(c.equals(d)); // True

來源:programcreek

作者未知

原文:Top 10 Mistakes Java Developers Make

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

原文链接:https://hbdhgg.com/1/152766.html

发表评论:

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

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

底部版权信息