1. Java 컬렉션 프레임워크 개요
java SE에는 클래스와 인터페이스 집합으로 구성된 Java 컬렉션 프레임워크(java Collection Framework, JCF라고 함)가 포함되어 있습니다. 저장된 데이터 저장 목표는 객체 컬렉션 처리를 위한 공통 프레임워크를 제공하고 다양한 객체 컬렉션을 처리할 때 프로그래머가 요구하는 코딩 양을 줄이는 것입니다.
컬렉션 클래스의 몇 가지 차이점은 반복되는 요소 작업을 지원하는지 여부 외에도 요소가 정렬되는지 여부와 null 요소 추가가 허용되는지 여부를 포함합니다. 이러한 세 가지 차이점을 기반으로 Java 컬렉션 프레임워크는 객체의 저장 방법을 세 가지 유형으로 나눕니다.
Set(세트): 객체 컨테이너의 객체에는 순서가 없으며 반복될 수 없습니다.
목록: 개체 컨테이너의 개체는 인덱스 순서에 따라 정렬되며, 중복된 개체가 있을 수 있습니다.
맵: 개체 컨테이너의 요소에는 "키 개체-값 개체" 매핑 쌍이 포함되어 있습니다. 여기서 키 개체는 반복될 수 없고 값 개체는 반복될 수 있습니다.
객체 정렬 및 순회 액세스 작업을 지원하기 위해 Java 컬렉션 프레임워크는 여러 인터페이스를 제공합니다.
SortedSet 인터페이스는 Set 유형 컨테이너에 대한 촬영 기능을 제공합니다.
SortedMap 인터페이스는 지도 유형 컨테이너에 대한 주요 개체 정렬을 제공합니다.
Comparable 및 comparator 인터페이스는 컬렉션의 개체를 정렬하는 데 사용됩니다.
2. Collection 인터페이스와 Iterator 인터페이스
Collection 인터페이스는 Collection 객체에 공통적인 몇 가지 기본 메서드를 정의합니다.
Iterator 인터페이스는 An 인터페이스입니다. 컬렉션을 탐색하는 데 사용됩니다.
1.List 인터페이스
List 인터페이스는 Collection 인터페이스를 상속합니다.
List의 요소는 다음과 같습니다. 순서.
목록은 일반적으로 중복 요소를 허용합니다.
목록 구현 클래스는 일반적으로 null 요소를 지원합니다.
목록 개체 컨테이너의 요소는 인덱스를 통해 액세스할 수 있습니다. ~ List 인터페이스의 가장 일반적으로 사용되는 구현 클래스는 ArrayList 클래스와 LinkedList 클래스입니다.
1).ArrayList
프로그램 예:
package lei; import java.util.ArrayList; import java.util.List; public class Test { public static void main(String[] args) { List list = new ArrayList<>(); list.add(1); list.add("zhangsan"); list.add(false); list.add('a'); list.add(0, "lisi"); list.add(1); list.remove(1); list.remove(2); list.set(0, "wangwu"); for (int i = 0; i < list.size(); i++) { System.out.println(list.get(i)); } } }
Object 클래스에서 정의한 equals() 메서드는 해당 메서드에 전달된 개체가 동일한 경우에만 사용할 수 있습니다. Object 메소드를 호출하는 객체는 true를 반환하기 때문입니다. equals() 메서드를 재정의하여 동일한 상태를 가진 두 객체를 동일한 객체로 처리할 수 있습니다.
2).LinkedList
프로그램 예:
package lei; import java.util.LinkedList; import java.util.List; public class Test2 { public static void main(String[] args) { LinkedList l=new LinkedList<>(); l.add("zhangsan"); l.add("lisi"); l.addFirst(1); l.addLast(4); System.out.println(l.getFirst()); System.out.println(l.getLast()); l.removeFirst(); l.removeLast(); for (int i = 0; i < l.size(); i++) { System.out.println(l.get(i)); } } }
LinkedList 및 ArrayList 선택
목록에 필요한 경우 빠른 액세스를 원하지만 요소를 자주 삽입하고 삭제하지 않으려면 ArrayList를 선택하는 것이 좋습니다. 목록에서 삽입 및 삭제 작업을 자주 수행해야 한다면 LinkedList를 선택해야 합니다.
2.set 인터페이스
set 인터페이스는 Collection 인터페이스를 상속하고 Collection 인터페이스의 모든 메소드도 상속합니다. 집합 인터페이스에는 다음과 같은 특징이 있습니다.
집합 유형 컨테이너에는 중복 요소가 포함될 수 없습니다. 컨테이너에 요소를 추가할 때 해당 요소의 내용이 중복되는지 비교해야 하므로 Set 유형의 개체 컨테이너에 추가된 개체는 equals() 메서드를 재정의해야 합니다.
요소는 순서대로일 수도 있고 아닐 수도 있습니다.
요소의 순서가 잘못되었을 수 있으므로 Set의 요소는 첨자 기반으로 액세스할 수 없습니다.
HashSet 클래스와 TreeSet 클래스는 Set 인터페이스를 구현하는 데 가장 일반적으로 사용됩니다.
1).Hashset
Hashset 클래스는 해시 알고리즘을 기반으로 하는 Set 인터페이스 구현으로 주로 다음과 같은 특징을 갖습니다.
Hashset을 순회할 때 요소는 다음과 같습니다. 거기에는 순서가 없습니다.
해시셋에는 중복된 요소가 허용되지 않습니다. 여기서 중복된 요소는 동일한 해시 코드를 갖고 있으며 equals() 메서드를 사용하여 비교할 때 true를 반환하는 두 개체를 참조합니다.
에는 null 요소가 포함될 수 있습니다.
만약 우리가 작성한 클래스가 equals 메소드를 재정의한다면, 이 클래스는 hashCode() 메소드도 재정의해야 하며, equals 메소드를 사용한 두 객체의 비교 결과가 true일 때 두 객체의 hashCode가 일치하는지 확인해야 합니다. 개체() 메서드 반환 값은 동일합니다.
프로그램 예:
package lei; import java.util.HashSet; import java.util.Set; public class Test4 { public static void main(String[] args) { Set<String> set=new HashSet<String>(); set.add("zhangsan"); set.add("lisi"); for(String s:set){ System.out.println(s); } } }
2).TreeSet
TreeSet 클래스는 Set 인터페이스를 구현할 뿐만 아니라 SortedSet 인터페이스도 구현하여 세트의 개체가 특정 순서로 정렬됩니다. 개체가 TreeSet 컬렉션에 추가되면 정렬된 개체 순서에 삽입됩니다. 그러나 이 정렬은 개체가 추가된 순서에 따라 정렬되지 않고 특정 알고리즘에 따라 정렬됩니다.
TreeSet은 자연 순서를 사용하거나 세트 생성 시 제공된 Comparator에 따라 요소를 정렬합니다. TreeSet은 자연 정렬과 사용자 정의 정렬이라는 두 가지 정렬 방법을 지원합니다.
3.지도 인터페이스
Map(映射)接口是java集合框架中不同于Collection接口的另一个重要接口,它对应的是在一种从键(Key)到值(Value)的对应关系的集合。Map类型的对象容器里面保存着两组对象,一组对象用于保存Map里的Key,另外一组用于保存Value。Key和Value可以升级任何引用类型的数据。Key不能重复,但是Value可以重复。
1).HashMap
HashMap是基于哈希算法的Map接口的实现。HashMap将它的键保存在哈希表中进行维护,键是唯一的。但是,HashMap并不保证键以特定顺序排列,特别是不保证顺序永久不变。
HashMap类实现了Map接口,从而具有Map接口的所有方法。
package day1228; import java.util.*; public class HashMapDemo { public static void main(String[] args) { // 创建一个新的HashMap Map<String, String> map = new HashMap<String, String>(); map.put("a1", "xiao"); map.put("b2", "xiaol"); map.put("a4", "xiaosd"); map.put("b1", "12a"); map.put("a3", "1"); // 使用iterator遍历 键和值 System.out.println("之前的Map值是:"); Set<String> keys = map.keySet(); for (Iterator<String> i = keys.iterator(); i.hasNext();) { String key = i.next(); String value = map.get(key); System.out.println(key + "=" + value); } // 删除键为"a4"的值 System.out.println("\n删除键值为a4的元素"); map.remove("a4"); // //使用iterator遍历 键和值 System.out.println("\n之后的Map值:"); keys = map.keySet(); for (Iterator<String> i = keys.iterator(); i.hasNext();) { String key = i.next(); String value = map.get(key); System.out.println(key + "=" + value); } } }
2).TreeMap
TreeMap类是基于红黑树算法的Map接口实现。TreeMap中键的存放方式与TreeSet相似,它将键存放在树中,键的顺序按照自然顺序或者自定义顺序两种方式排列。
程序实例:
package day1228; import java.util.*; public class TreeMapDemo { public static void main(String[] args) { //创建一个新的TreeMap Map<Integer, String> map = new TreeMap<Integer, String>(); map.put(1, "one"); map.put(2, "two"); map.put(3, "three"); map.put(4, "four"); map.put(5, "five"); //使用iterator显示键和值 System.out.println("之前的map值为:"); Set<Integer> keys=map.keySet(); for(Object key:keys){ String value=map.get(key); System.out.println(key+"="+value); } //删除键为3的值 System.out.println("\n删除键值为3的元素"); map.remove(3); //使用iterator显示键和值 System.out.println("\n之后的值Map为:"); for(Object key:keys){ String value=map.get(key); System.out.println(key+"="+value); } } }
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持PHP中文网!
更多Java 수집 프레임워크에 대한 자세한 설명相关文章请关注PHP中文网!