[英]Convert comma separated string into a HashSet
那么,您將如何進行轉換
String csv = "11,00,33,66,44,33,22,00,11";
以最快、最優化的方式到哈希集。
這是用於用戶 ID 的列表。
我運行了通過測試程序提供的所有答案,其中每個方法對於更大的 CSV 字符串被調用 500,000 次。 此測試連續執行 5 次(以防程序啟動減慢初始方法),我以毫秒 (ms) 為單位得到以下結果:
Method One Liner-> 6597
Method Split&Iterate-> 6090
Method Tokenizer-> 4306
------------------------------------------------
Method One Liner-> 6321
Method Split&Iterate-> 6012
Method Tokenizer-> 4227
------------------------------------------------
Method One Liner-> 6375
Method Split&Iterate-> 5986
Method Tokenizer-> 4340
------------------------------------------------
Method One Liner-> 6283
Method Split&Iterate-> 5974
Method Tokenizer-> 4302
------------------------------------------------
Method One Liner-> 6343
Method Split&Iterate-> 5920
Method Tokenizer-> 4227
------------------------------------------------
static void method0_oneLiner() {
for (int j = 0; j < TEST_TIMES; j++) {
Set<String> hashSet = new HashSet<String>(Arrays.asList(csv
.split(",")));
}
}
// ———————————————————————————————–
static void method1_splitAndIterate() {
for (int j = 0; j < TEST_TIMES; j++) {
String[] values = csv.split(",");
HashSet<String> hSet = new HashSet<String>(values.length);
for (int i = 0; i < values.length; i++)
hSet.add(values[i]);
}
}
static void method2_tokenizer() {
for (int j = 0; j < TEST_TIMES; j++) {
HashSet<String> hSet = new HashSet<String>();
StringTokenizer st = new StringTokenizer(csv, ",");
while (st.hasMoreTokens())
hSet.add(st.nextToken());
}
}
String[] values = csv.split(",");
Set<String> hashSet = new HashSet<String>(Arrays.asList(values));
其他 6 個答案很棒,因為它們是最直接的轉換方式。
但是,由於String.split()
涉及Arrays.asList
則Arrays.asList
,而Arrays.asList
正在進行冗余轉換,您可能希望這樣做,這可能會在一定程度上提高性能。
編輯如果您對將擁有多少項目有一個大致的了解,請使用HashSet
構造函數參數來避免不必要的調整大小/散列:
HashSet<String> myHashSet = new HashSet(500000); // Or a more realistic size
StringTokenizer st = new StringTokenizer(csv, ",");
while(st.hasMoreTokens())
myHashSet.add(st.nextToken());
Arrays.stream(csv.split(",")).collect(Collectors.toSet());
你可以試試
Set<String> set= new HashSet<String>(Arrays.asList(yourString.split(",")));
試試這個:
Set<String> hashSet = new HashSet<>(Arrays.asList(csv.split(",")));
但是要小心,這可能是最簡單的方法,但不一定是最佳方法。
String[] array= csv.split(",");
Set<String> set = new HashSet<String>(Arrays.asList(array));
@Kayaman 目前接受的答案很好,但我有一些東西要從 Java API 網頁中添加。 由於沒有足夠的聲譽,我無法將其添加為答案的評論。
不鼓勵使用 StringTokenizer。 它在此處的 Java API 網頁上提到http://docs.oracle.com/javase/7/docs/api/java/util/StringTokenizer.html
StringTokenizer 是一個遺留類,出於兼容性原因保留,但不鼓勵在新代碼中使用它。 建議任何尋求此功能的人改用 String 的 split 方法或 java.util.regex 包。
嘗試,
String[] splitValues = csv.split(",");
Set<String> set = new HashSet<String>(Arrays.asList(splitValues));
並且還使用
collectionutils.addall();
試試
String[] args = csv.split(",");
Set<String> set = new HashSet<String>(Arrays.asList(args));
使用較新的 Java 版本:
import java.util.Set;
Set<String> hashSet = Set.of(csv.split(","));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.