集合、Object类和匿名内部类

本文详细介绍了Java集合框架,包括为什么使用集合、集合结构、List接口及其实现类ArrayList和LinkedList的区别,以及Object类的重要方法。还探讨了Set集合中的HashSet和TreeSet,强调了在存储自定义对象时重写equals和hashCode方法的重要性,并引入了匿名内部类的概念。
摘要由CSDN通过智能技术生成

1.集合

1.1为什么要有集合?

集合和数组都是可以存数据的,真实开发的时候用的是集合而不是数组

为啥?

        ①数组的容量是固定的。

        ②数组封装的方法比较少。

Java给咱们封装了集合类库,只需要实例化出来一个对象,使用对象调用方法即可完成数据相关的操作。

1.2集合结构

Interface Collection<E>  Java 中集合的总接口

       ① List<E> Colletion的子接口,特征: 存放数据是有序的,可以重复

                ArrayList<E>  List的实现类,里面写好了List接口所有的抽象方法都已经实现好了,功能写好 底层是数组

                LinkedList<E>  List的实现类, 里面有自己独有的方法 底层是链表

       ②Set<E> Collection的子接口, 特征: 存放数据是无序的,不可重复

                HashSet<E> Set的实现类 底层是Hash算法

                TreeSet<E> Set的实现类 底层是二叉树

1.3Collection接口【开发不用】

学习Collection接口就在学习它下面的方法

Collection下面的方法:
    增:
    boolean add(E e);  添加数据的
    boolean addAll(Collection<? extends E> c);  将一个集合添加到另外的一个集合中
    删:
    boolean remove(Object obj); 删除指定的元素
    boolean    removeAll(Collection<?> c)删除指定集合中包含的所有此集合的元素(可选操作)
    void clear();  清空集合中所有的元素
    
 查:
    int size();  集合中元素的个数
    Object[]  toArray();将集合转为数组
    
 boolean contains(Object obj);在集合中是否包含一个obj元素
 boolean containsAll(Collection<? extends E> c); 判断一个集合是否是另外一个结合的子集合
 boolean  isEmpty(); 判断一个集合是否为空

import java.util.ArrayList;
import java.util.Collection;



public class Demo1 {
	public static void main(String[] args) {
		//父类的引用指向了子类的对象,意味着 对象只能调用父类的方法     
		//对象不能调用子类独有的方法  只能调用重写的方法
		//Collection 所有的抽象方法都被ArrayList  重写了
		Collection<String> collection = new ArrayList<String>();//容器  只能放String类型的数据
		collection.add("红旗渠");
		collection.add("散花");
		collection.add("黄鹤楼");
		System.out.println(collection);//[红旗渠, 散花, 黄鹤楼]
		Collection<String> collection1 = new ArrayList<String>();//容器  只能放String类型的数据
		collection1.add("舍得");
		collection1.add("茅台");
		collection1.add("牛栏山");
		System.out.println(collection1);
		collection.addAll(collection1);//将collection1这个集合添加到collection中
		System.out.println(collection);//[红旗渠, 散花, 黄鹤楼, 舍得, 茅台, 牛栏山]
		
//		Collection<Integer> collection2 = new ArrayList<Integer>();//容器  只能放String类型的数据
//		collection2.add(1);
//		collection2.add(2);
//		collection2.add(3);
//		
//		collection.addAll(collection2);
		System.out.println(collection.remove("舍得"));//删除指定的数据
		System.out.println(collection);//删除之后的结果 
		//[红旗渠, 散花, 黄鹤楼, 茅台, 牛栏山]
		//System.out.println(collection.remove("舍得"));
		Collection<String> collection3 = new ArrayList<String>();//容器  只能放String类型的数据
		collection3.add("舍得");
		collection3.add("茅台");
		collection3.add("牛栏山");
		collection3.add("红花郎");
		System.out.println(collection3);//[舍得, 茅台, 牛栏山, 红花郎]
		collection.removeAll(collection3);//删除指定集合中包含的所有此集合的元素
		//在collection 删除collection3 中包含的元素
		System.out.println(collection);//[红旗渠, 散花, 黄鹤楼]
		collection.clear();
		System.out.println(collection);//[]
		
		
		
	}
}

1.4遍历集合中的数据

        ①使用for循环
        ②使用增强for循环【重点】
        ③使用迭代器【重点】

1.4.1使用for循环遍历集合数据

import java.util.ArrayList;
import java.util.Collection;

public class Demo2 {
	public static void main(String[] args) {
		Collection<Character> list =  new ArrayList<Character>();
		list.add('a');
		list.add('b');
		list.add('c');
		System.out.println(list);//[a, b, c]
		//for循环遍历
		//将集合转为数组 然后再遍历
		Object[] objs = list.toArray();
		for (int i = 0; i < objs.length; i++) {
			System.out.println(objs[i]);
		}
		
	}
}

1.4.2使用增强for循环

语法格式:

for (集合或者数组的元素的数据类型 临时变量名字 : 集合或者数组) {

}
import java.util.ArrayList;
import java.util.Collection;

public class Demo3 {
	public static void main(String[] args) {
		Collection<String> liStrings = new ArrayList<String>();
		liStrings.add("张三");
		liStrings.add("狗蛋");
		liStrings.add("老邢");
		System.out.println(liStrings);
		//使用增强for循环遍历数据
		for (String s : liStrings) {
			System.out.println(s);
		}
		
	}
}

1.4.3使用迭代器【重点】

也是对集合进行遍历的一种方式

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

public class Demo4 {
	public static void main(String[] args) {
		Collection<String> liSt
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值