day15

import java.util.*;

/*
Collection定义了集合框架的共性功能。
1,添加
	add(e);
	addAll(collection);

2,删除
	remove(e);
	removeAll(collection);
	clear();

3,判断。
	contains(e);
	isEmpty();

4,获取
	iterator();
	size();

5,获取交集。
	retainAll();

6,集合变数组。
	toArray();



1,add方法的参数类型是Object。以便于接收任意类型对象。

2,集合中存储的都是对象的引用(地址)


什么是迭代器呢?
其实就是集合的取出元素的方式。
如同抓娃娃游戏机中的夹子。

迭代器是取出方式,会直接访问集合中的元素。
所以将迭代器通过内部类的形式来进行描述。
通过容器的iterator()方法获取该内部类的对象。




*/
class  CollectionDemo
{
	public static void main(String[] args) 
	{
		
		method_get();
	}
	public static void method_get()
	{
		ArrayList al = new ArrayList();

		//1,添加元素。
		al.add("java01");//add(Object obj);
		al.add("java02");
		al.add("java03");
		al.add("java04");

		/*
		Iterator it = al.iterator();//获取迭代器,用于取出集合中的元素。

		while(it.hasNext())
		{
			sop(it.next());
		}
		*/

		for(Iterator it = al.iterator(); it.hasNext() ; )
		{
			sop(it.next());
		}
	}


	public static void method_2()
	{
		ArrayList al1 = new ArrayList();

		al1.add("java01");
		al1.add("java02");
		al1.add("java03");
		al1.add("java04");
		ArrayList al2 = new ArrayList();

		al2.add("java03");
		al2.add("java04");
		al2.add("java05");
		al2.add("java06");

		
		//al1.retainAll(al2);//去交集,al1中只会保留和al2中相同的元素。
		al1.removeAll(al2);

		sop("al1:"+al1);
		sop("al2:"+al2);




	}

	public static void base_method()
	{
		//创建一个集合容器。使用Collection接口的子类。ArrayList
		ArrayList al = new ArrayList();

		//1,添加元素。
		al.add("java01");//add(Object obj);
		al.add("java02");
		al.add("java03");
		al.add("java04");

		//打印原集合。
		sop("原集合:"+al);


		//3,删除元素。
		//al.remove("java02");
		//al.clear();//清空集合。


		//4,判断元素。
		sop("java03是否存在:"+al.contains("java03"));
		sop("集合是否为空?"+al.isEmpty());


		//2,获取个数。集合长度。
		sop("size:"+al.size());

		//打印改变后的集合。
		sop(al);

	}

	public static void sop(Object obj)
	{
		System.out.println(obj);
	}
}

### 黑马 Java Day 15 课程资料与教程 #### 一、多线程编程基础 在黑马程序员Java培训的第15天,重点讲解了多线程的基础概念及其创建方式。Java中的线程是程序执行流的最小单位,在现代操作系统中可以并发运行多个线程来提高效率[^4]。 对于线程的创建有两种主要方法:继承`Thread`类重写其`run()`方法;实现`Runnable`接口同样需要定义该方法并由外部传入到`Thread`实例中启动新线程。这两种方式各有优劣,前者更直观但可能造成单继承局限性;后者则更加灵活适用于资源共享场景[^4]。 ```java // 继承 Thread 类的方式 class MyThread extends Thread { public void run() { System.out.println("This is a thread by extending Thread class."); } } // 实现 Runnable 接口的方式 class MyRunnable implements Runnable { @Override public void run() { System.out.println("This is a thread by implementing Runnable interface."); } } ``` #### 二、线程同步机制 当涉及到共享资源访问时,为了防止数据竞争条件的发生,引入了锁的概念用于控制同一时刻只有一个线程能够操作特定区域内的代码——即所谓的临界区。可以通过`synchronized`关键字修饰方法或语句块达到此目的[^4]。 ```java public synchronized void criticalSectionMethod(){ // 只有一个线程能进入这段代码 } ``` 或者使用显式的对象监视器: ```java Object lock = new Object(); synchronize(lock){ // 同步代码块 } ``` #### 三、高级特性介绍 除了基本的操作外,还探讨了一些更为复杂的主题如守护进程(daemon threads),它们通常作为服务提供者存在而不参与应用程序的主要逻辑流程;以及如何通过`join()`函数等待其他线程完成工作后再继续执行当前线程的任务等实用技巧[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值