Java学者日记 集合(不含泛型)

集合(不带泛型)

一、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());
		}

	}
       

猜你喜欢

转载自blog.csdn.net/qq_42368456/article/details/81025742