Java基础--集合

集合的概述和Collection集合

集合的概述:集合是一个容器,是用来存储和获取数据的.

Collection: 是单列集合的顶层接口。

Collection 表示一组对象,这些对象也称为 collection 的元素。
一些 collection 允许有重复的元素,而另一些则不允许。
一些 collection 是有序的,而另一些则是无序的。

JDK 不提供此接口的任何直接 实现:它提供更具体的子接口(如 Set 和 List)实现。
创建Collection集合的对象,我们采用的是多态的方式,使用的是具体的ArrayList类。
因为这个类是最常用的集合类。
ArrayList()
Collection< E>:
< E>:是一种特殊的数据类型,泛型。

如何使用呢?
在出现E的地方用引用数据类型替换即可。

举例:
Collection< String >,Collection< Student >

集合结构图:
在这里插入图片描述

Collection集合的成员方法

boolean add(E e):添加元素
boolean remove(Object o):从集合中移除元素
void clear():清空集合中的元素
boolean contains(Object o):判断集合中是否存在指定的元素
boolean isEmpty():判断集合是否为空
int size():集合的长度,也就是集合中元素的个数

List集合

特点:
有序的 collection(也称为序列)。

此接口的用户可以对列表中每个元素的插入位置进行精确地控制。

用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素。

与 set 不同,列表通常允许重复的元素。
List:
ArrayList:底层数据结构是数组,查询快,增删慢
LinkedList:底层数据结构是链表,查询慢,增删快

List集合的特有成员方法
void add(int index,E element):在指定位置添加元素
remove(int index):删除指定位置的元素
get(int index):获取指定位置的元素
set(int index,E element):修改指定位置的元素

迭代器、for循环,增强for循环遍历集合

Iterator迭代器

Iterator iterator():返回在此 collection 的元素上进行迭代的迭代器。
通过集合对象调用iterator()方法得到迭代器对象。
Iterator:
E next():返回迭代的下一个元素。
boolean hasNext():如果仍有元素可以迭代,则返回 true。

特有功能:
E previous():返回列表中的前一个元素。
boolean hasPrevious():如果以逆向遍历列表,列表迭代器有多个元素,则返回 true。
注意:ListIterator可以实现逆向遍历,但是要求先正向遍历,才能逆向遍历。

三种遍历案例:

            //创建一个list集合
List<Student> list=new ArrayList<Student>();
         Student s1=new Student("aaa",14);
        Student s2 = new Student("bbb", 23);
           //将两个学生对象加到list集合中
          list.add(s1);
          list.add(s2);

          //迭代器
        Iterator<Student> it = list.iterator();

        while (it.hasNext()){
            Student s = it.next();
            System.out.println(s.getAge()+s.getName());
        }
        //for循环遍历
        for (int x=0;x<list.size();x++){
            Student s = list.get(x);
            System.out.println(s.getAge()+s.getName());
        }

        //增强for循环遍历
        for (Student s:list){
            System.out.println(s.getAge()+s.getName());
        }
    }

Set集合特点和HashSet集合类

Set:元素唯一,存储元素无序
一个不包含重复元素的 collection

HashSet:
它不保证 set 的迭代顺序;特别是它不保证该顺序恒久不变

HashSet如何保证元素唯一性的原理?

通过查看add方法的源码,我们知道了添加功能的执行过程中,是进行了数据的判断的。

这个判断的流程是:
首先比较对象的哈希值是否相同,这个哈希值是根据对象的hashCode()计算出来的。

		如果哈希值不同,就直接添加到集合中
		如果哈希值相同,继续执行equals()进行比较,
			返回的是true,说明元素重复,不添加。
			返回的是false,说明元素不重复,就添加。

如果我们使用HashSet集合存储对象,你要想保证元素的唯一性,就必须重写hashCode()和equals()方法。

两种方式遍历
迭代器
增强for

Map集合和HashMap集合

Map:
将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。

public interface Map<K,V>

Map集合的成员方法

V put(K key,V value):添加元素
V remove(Object key):根据键删除键值对元素
void clear():移除所有的键值对元素
boolean containsKey(Object key):判断集合是否包含指定的键
boolean containsValue(Object value):判断集合是否包含指定的值
boolean isEmpty():判断集合是否为空
int size():返回集合中的键值对的对数

Map集合的获取功能

V get(Object key):根据键获取值
Set keySet():获取所有键的集合
Collection values():获取所有值的集合

Map经典案例代码:

/*
 * 需求:HashMap集合嵌套ArrayList集合并遍历。
 * 定义一个HashMap集合,它包含三个元素,每一个元素的键是String类型,值是ArrayList类型。
 * 键:String			人物来自哪部电视剧
 * 值:ArrayList		人物的名称
 * 每一个ArrayList集合的数据是String类型的。
 * 给出如下的字符串数据,请用代码实现需求。
 * 第一个ArrayList集合的元素:(三国演义)
 * 		诸葛亮
 * 		赵云
 * 第二个ArrayList集合的元素:(西游记)
 * 		唐僧
 * 		孙悟空
 * 第三个ArrayList集合的元素:(水浒传)
 * 		武松
 * 		鲁智深
 */
public class HashMapIncludeArrayListTest {
	public static void main(String[] args) {
		//创建集合对象
		HashMap<String,ArrayList<String>> hm = new HashMap<String,ArrayList<String>>();
	
		//创建元素1
		ArrayList<String> sgyy = new ArrayList<String>();
		sgyy.add("诸葛亮");
		sgyy.add("赵云");
		//把元素添加到hm中
		hm.put("三国演义", sgyy);
		
		//创建元素2
		ArrayList<String> xyj = new ArrayList<String>();
		xyj.add("唐僧");
		xyj.add("孙悟空");
		//把元素添加到hm中
		hm.put("西游记", xyj);
		
		//创建元素3
		ArrayList<String> shz = new ArrayList<String>();
		shz.add("武松");
		shz.add("鲁智深");
		//把元素添加到hm中
		hm.put("水浒传", shz);
		
		//遍历集合
		Set<String> set = hm.keySet();
		for(String key : set) {
			System.out.println(key);
			ArrayList<String> value = hm.get(key);
			for(String s : value) {
				System.out.println("\t"+s);
			}
		}
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值