集合(不带泛型)
一、Collection接口
在java类库中,集合类的基本接口是Collection接口,该接口包含两个基本方法:
public interface Collection<E>{
boolean add(E element);
Iterator<E> iterator();
//....
}
add方法用于向集合中添加元素,Iterator方法用于返回一个实现了Iterator接口的对象,可以使用这个迭代器对象依次遍历集合中的元素(E代表泛型类型,本次集合内容不讨论泛型)
二、迭代器
Iterator接口包含4个方法:
public interface Iterator<E> {
boolean hasNext();
E next();
default void remove();
default void forEachRemaining(Consumer<? super E> action);
}
如果想要查看集合中的所有元素,就请求一个迭代器,并在hasNext返回true时反复的调用next方法。 具体方法内容见相关class文件。
三、具体的集合
1.List
List类的主要实现是ArrayList类,List常用方法:增(add),删(remove),改(set),查(get),插(add(另)),长度(size)。
通过一个具体的程序来了解List类的工作方式以及相关的方法:
package Collection;
import java.util.ArrayList;
import java.util.List;
import org.junit.Test;
public class TestList {
// ArrayList:List的主要实现类
/*
* List常用方法:增(add),删(remove),改(set),查(get),插(add(另)),长度(size)
*/
@Test
public void testList2(){
List list = new ArrayList();
list.add(123);
list.add(456);
list.add(new String("AA"));
list.add(new String("GG"));
list.add(456);
// int indexOf(Object obj):返回obj首次在集合中出现的位置,没有的话返回-1
// int lastIndexOf(Object obj):返回obj最后一次在集合中出现的位置,没有的话返回-1
System.out.println(list.indexOf(456));
System.out.println(list.lastIndexOf(456));
System.out.println(list.indexOf(123) == list.lastIndexOf(123));
System.out.println(list.indexOf(444));
//List subList(int fromIndex, int toIndex):返回一个从fromIndex开始到toIndex结束
//的左闭右开的子list
List list1 = list.subList(0, 3);
System.out.println(list1);
}
@Test
public void testList1() {
List list = new ArrayList();
list.add(123);
list.add(456);
list.add(new String("AA"));
list.add(new String("GG"));
System.out.println(list);// 有序
// void add(int index, Object ele):在指定索引位置添加元素
list.add(0, 555);
System.out.println(list);
// Object get(int index):获取指定位置的元素
Object obj = list.get(1);
System.out.println(obj);
// Object remove(int index):删除指定索引位置的元素
list.remove(0);
System.out.println(list.get(0));
// Object set(int index, Object ele):设置指定索引位置的元素为ele
list.set(0, 234);
System.out.println(list);
}
}
2.Set
Set接口: 存储无序的,不可重复的元素。其中HashSet为主要实现类
说明:①存储的结果是无序性的,不可重复的
②要求添加进Set中的元素所在的类,一定要重写equals()和hashCode()方法,进而保证不可重复性。
@Test
public void TestHashSet() {
Set set = new HashSet();
set.add(123);
set.add(456);
set.add("AA");
set.add("AA");// 不能添加
set.add(new String("AA"));// 不能添加
set.add("BB");
set.add(null);
Person p1 = new Person("GG", 22);
Person p2 = new Person("GG", 22);
set.add(p1);
set.add(p2);
System.out.println(set.size());
System.out.println(set);
}
3.Map
Map即为映射,Java类库为映射提供了两个通用的实现:HashMap和TreeMap,这两个类都实现了Map接口
①HashMap
HashMap: 1.Key是用Set来存放的,不可重复,Value是用Collection存放的,可以重复 ,一个键值对是一个Entry,所有Entry用Set存放的,不可重复
2.向HashMap中添加元素时,会调用key所在类的equals方法,判断两个key是否相同。
②遍历Map:
@Test
public void test2() {
Map map = new HashMap();
map.put("AA", 123);
map.put("BB", 456);
map.put("BB", 456);// map中key不可重复
map.put(567, "CC");
map.put(null, null);
map.put(new Person("AA", 26), 55);
// 1.遍历key集
Set set = map.keySet();
for (Object obj : set) // 或迭代器遍历
System.out.println(obj);
// 2.遍历value集
Collection values = map.values();
Iterator i = values.iterator(); // 或foreach循环遍历
while (i.hasNext()) {
System.out.println(i.next());
}
// 3.遍历key-value对
// 方式一
Set set1 = map.keySet();
for (Object obj : set1)
System.out.println(obj + "--->" + map.get(obj));
// 方式二
Set set2 = map.entrySet();
for (Object obj : set2) {
Map.Entry entry = (Map.Entry) obj;
System.out.println(entry);
// System.out.println(entry.getKey() + "--->" + entry.getValue());
}
}