[javasterdi]13Javaベース(10)
5475 ワード
2021-Java Studio第10週課題
Javaベース
集合フレームワーク(JCF)
Javaコレクションフレームワークとは、Javaに格納されているデータの基本データ構造を1つの場所に集中して管理し、使いやすいものを指す.
インタフェース実装クラスの特徴:ListLinkedListStackVectorArrayListシーケンスを有するデータセット、重複許容されたSetHashSetTreesSetシーケンスを保持しないデータセット、重複許容されたxMapHashMapTreeHashTable KeyValueペアの値が重複可能なx
Listインタフェース
LinkedList:双方向ポインタ構造;頻繁なデータ挿入/削除は非常に有用であり、ArrayListに比べて検索効率が低下する
Stack:一端から挿入および削除できるデータ構造.
Vector:ダイナミックサイズ配列と配列と同様に、配列はインデックスによってアクセスおよび同期でき、一度に1つのスレッドしか呼び出せないベクトルメソッドです.マルチスレッド環境でない場合は、ArrayListを使用することを推奨します.
ArrayList:一方向ポインタ構造、データインデックス、クエリー性能に優れ、頻繁にデータを挿入/削除する効率が低い
Setインタフェース
HashSet:予測不可能な順序;Hashアルゴリズムを使用したランダムアクセス速度が最も速い
TreeSet:データをバイナリ検索ツリーとして格納し、格納順序xを保持する
Mapインタフェース
HashMap:繰り返しと順序xを許可し、ValueにNull値を入れることができる
TreeMap:キー値が自然な順序で昇順され、キー値ペアとして格納されます.ソートとクイック検索
HashTable:HashMapより遅いが同期し、Valueは空の値Xを許可する
Streamのフィーチャークリーンアップ(map、filter、sorded、distive、limit、foreach)
ArrayList<string> list = new ArrayList<>(Arrays.asList("Apple","Banana","Apple",Melon","Grape","Strawberry"));
map
要素を特定の条件の値に変換
大文字と小文字の変換などの処理に使用list.stream().map(s->s.toUpperCase());
list.stream().map(String::toUpperCase);
その後collectで結果を返すことができます.foreachで直接出力することもできます.System.out.println(list.stream().map(s->s.toUpperCase()).collect(Collectors.toList())); //[APPLE, BANANA, APPLE, MELON, GRAPE, STRAWBERRY]
filter
要素を条件でフィルタ
特定の文字を含む長さ制限の使用list.stream().filter(t->t.length()>5)
エレメントサイズが5より大きいもののみがフィルタされます.System.out.println(list.stream().filter(t->t.length()>5).collect(Collectors.toList())); //[Banana, Strawberry]
sorted
要素のソート操作list.stream().sorted()
リスト内の要素をソートします.System.out.println(list.stream().sorted().collect(Collectors.toList())); //[Apple, Apple, Banana, Grape, Melon, Strawberry]
discinct
要素の重複除外list.stream().distinct()
リスト内の重複を削除します.list.stream().distinct().forEach(System.out.println);
// Apple
// Banana
// Melon
// Grape
// Strawberry
limit
ストリームから一定数のデータを取得して、新しいストリームを返します.list.stream.limit(3).forEach(System.out.println);
// Apple
// Banana
// Apple
foreach
個々の出力要素list.stream.forEach(System.out.println);
// Apple
// Banana
// Apple
// Melon
// Grape
// Strawberry
Collection.foreachとStream。foreach差異
Streamオブジェクトを使用するかどうか
Collection.forEachはオブジェクトを作成せずにメソッドを呼び出します.
反対ストリームメソッドを呼び出すにはstream()を使用してStreamオブジェクトを作成する必要があります.list.forEach(System.out::println);
list.stream().forEach(Systmem.out::println);
Parallel Stream
public void print() { List<Integer> nums = Arrays.asList(1, 2, 3, 4, 5);
System.out.println("Collection.forEach 출력 시작");
nums.forEach(System.out::println);
System.out.println("Stream.forEach 출력 시작");
nums.parallelStream().forEach(System.out::println); }
//Collection.forEach 출력 시작
//1
//2
//3
//4
//5
//Stream.forEach 출력 시작
//3
//4
//1
//5
//2
출처: https://dundung.tistory.com/247 [DunDung]
ParallelStreamによって作成されたストリームオブジェクトは、複数のスレッド上でストリームを実行するため、実行順序は予知できませんが、Collection.foreachは一定の順序を保証します.
for文をストリームに変換する方法
List<String> list1= Arrays.asList("a", "b", "c", "d", "e");
List<String> list2 = Arrays.asList("a", "b", "d");
//for문 사용해 같은 것만 List에 담으려면
List<String> result1 = new ArrayList<>();
for(String str1 : list1){
for(String str2 : list2){
if(str1.equals(str2)){
result1.add(str1);
}
}
}
for(String str : result1){
System.out.print(str);
}
// stream 이용해 같은 것만 List에 담으려면
List<String> result2 =
list1.stream()
.filter(str -> list2.stream().anyMatch(Predicate.isEqual(str)))
.collect(Collectors.toList());
result2.stream().forEach(System.out::print);
Reference
この問題について([javasterdi]13Javaベース(10)), 我々は、より多くの情報をここで見つけました
https://velog.io/@dustndus8/자바스터디9.-10주차-과제-자바기초
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
ArrayList<string> list = new ArrayList<>(Arrays.asList("Apple","Banana","Apple",Melon","Grape","Strawberry"));
list.stream().map(s->s.toUpperCase());
list.stream().map(String::toUpperCase);
System.out.println(list.stream().map(s->s.toUpperCase()).collect(Collectors.toList())); //[APPLE, BANANA, APPLE, MELON, GRAPE, STRAWBERRY]
list.stream().filter(t->t.length()>5)
System.out.println(list.stream().filter(t->t.length()>5).collect(Collectors.toList())); //[Banana, Strawberry]
list.stream().sorted()
System.out.println(list.stream().sorted().collect(Collectors.toList())); //[Apple, Apple, Banana, Grape, Melon, Strawberry]
list.stream().distinct()
list.stream().distinct().forEach(System.out.println);
// Apple
// Banana
// Melon
// Grape
// Strawberry
list.stream.limit(3).forEach(System.out.println);
// Apple
// Banana
// Apple
list.stream.forEach(System.out.println);
// Apple
// Banana
// Apple
// Melon
// Grape
// Strawberry
list.forEach(System.out::println);
list.stream().forEach(Systmem.out::println);
public void print() { List<Integer> nums = Arrays.asList(1, 2, 3, 4, 5);
System.out.println("Collection.forEach 출력 시작");
nums.forEach(System.out::println);
System.out.println("Stream.forEach 출력 시작");
nums.parallelStream().forEach(System.out::println); }
//Collection.forEach 출력 시작
//1
//2
//3
//4
//5
//Stream.forEach 출력 시작
//3
//4
//1
//5
//2
출처: https://dundung.tistory.com/247 [DunDung]
List<String> list1= Arrays.asList("a", "b", "c", "d", "e");
List<String> list2 = Arrays.asList("a", "b", "d");
//for문 사용해 같은 것만 List에 담으려면
List<String> result1 = new ArrayList<>();
for(String str1 : list1){
for(String str2 : list2){
if(str1.equals(str2)){
result1.add(str1);
}
}
}
for(String str : result1){
System.out.print(str);
}
// stream 이용해 같은 것만 List에 담으려면
List<String> result2 =
list1.stream()
.filter(str -> list2.stream().anyMatch(Predicate.isEqual(str)))
.collect(Collectors.toList());
result2.stream().forEach(System.out::print);
Reference
この問題について([javasterdi]13Javaベース(10)), 我々は、より多くの情報をここで見つけました https://velog.io/@dustndus8/자바스터디9.-10주차-과제-자바기초テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol