Java——集合(Collection接口),迭代器,增强for循环,泛型

一、集合

Collection接口中的方法是集合中所有实现类必须拥有的方法。

  • ArrayList implements List
  • List extends Collection

1、基本使用

其他

import java.util.ArrayList;
/*
 *  集合体系,
 *    目标  集合本身是一个存储的容器:
 *       必须使用集合存储对象
 *       遍历集合,取出对象
 *       集合自己的特性
 */
public class ArrayListDemo {
	public static void main(String[] args) {
		/*
		 *  集合ArrayList,存储int类型数
		 *  集合本身不接受基本类,自动装箱存储
		 */
		ArrayList<Integer> array = new ArrayList<Integer>();
		array.add(11);
		array.add(12);
		for(int i = 0 ; i < array.size() ;i++){
			System.out.println(array.get(i));
		}
		/*
		 *  集合存储自定义的Person类的对象
		 */
		ArrayList<Person> arrayPer = new ArrayList<Person>();
		arrayPer.add(new Person("a",20));
		arrayPer.add(new Person("b",18));
		arrayPer.add(new Person("c",22));
		for(int i = 0 ; i < arrayPer.size();i++){
			//get(0),取出的对象Person对象
			//打印的是一个对象,必须调用的toString()
			System.out.println(arrayPer.get(i));
		}
	}
}

2、清空集合中的元素

/*
 * Collection接口的方法
 * void clear() 清空集合中的所有元素
 * 集合容器本身依然存在
 */
public static void function(){
	//接口多态的方式调用
	Collection<String> coll = new ArrayList<String>();
	coll.add("abc");
	coll.add("bcd");
	System.out.println(coll);  // ["abc","bcd"]

	coll.clear();

	System.out.println(coll);

}

3、判断对象是否存在于集合中

/*
 * Collection接口方法
 * boolean contains(Object o) 判断对象是否存在于集合中,对象存在返回true
 * 方法参数是Object类型
 */
private static void function_1() {
	Collection<String> coll = new ArrayList<String>();
	coll.add("abc");
	coll.add("money");
	coll.add("123");

	boolean b = coll.contains("abc");
	System.out.println(b);
}

4、将集合转成数组

/*  Collection接口方法
 *  Object[] toArray() 集合中的元素,转成一个数组中的元素, 集合转成数组
 *  返回是一个存储对象的数组, 数组存储的数据类型是Object
 */
private static void function_2() {
	Collection<String> coll = new ArrayList<String>();
	coll.add("abc");
	coll.add("itcast");
	coll.add("itheima");
	coll.add("money");
	coll.add("123");

	Object[] objs = coll.toArray();
	for(int i = 0 ; i < objs.length ; i++){
		System.out.println(objs[i]);
	}
}

5、移除元素

/*
 * Collection接口方法
 * boolean remove(Object o)移除集合中指定的元素
 */
private static void function_3(){
	Collection<String> coll = new ArrayList<String>();
	coll.add("abc");
	coll.add("money");
	coll.add("money");
	coll.add("123");
	System.out.println(coll);

	boolean b = coll.remove("money");  //只会移除第一个
	System.out.println(b);
	System.out.println(coll);
}

二、迭代器

迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构。迭代器通常被称为“轻量级”对象,因为创建它的代价小。

集合中的迭代器

由于Java中有多种不同的集合,我们又想有一个统一的方式来获取它的值,所以有了迭代器。

接口Iterator : 其中有两个抽象方法

  • boolean hasNext() 判断集合中还有没有可以被取出的元素,如果有返回true
  • next() 取出集合中的下一个元素

ArrayList重写方法 iterator(),返回了Iterator接口的实现类的对象

Iterator it = array.iterator(),运行结果就是Iterator接口的实现类的对象

it是接口的实现类对象,调用方法 hasNext 和 next 集合元素迭代

1、基本使用

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

public class CollectionDemo1 {
	public static void main(String[] args) {
		//集合可以存储任意类型的对象
		//集合中,不指定存储的数据类型, 集合就可以什么都存
		Collection coll = new ArrayList();  // 多态
		coll.add("abc");
		coll.add("uyjgtfd");

		//迭代器获取
		Iterator it = coll.iterator();
		while(it.hasNext()){
			//it.next()获取出来的是什么数据类型,Object类
			//Object obj = it.next();
			//System.out.println(obj);
			String s = (String)it.next();
			System.out.println(s.length());
		}
	}
}

2、指定迭代数据类型

public static void main(String[] args) {
	Collection<String> coll = new ArrayList<String>();
	coll.add("abc1");
	coll.add("abc2");
	coll.add("abc3");
	coll.add("abc4");
	//迭代器,对集合ArrayList中的元素进行取出

	//调用集合的方法iterator()获取出,Iterator接口的实现类的对象
	Iterator<String> it = coll.iterator();
	//接口实现类对象,调用方法hasNext()判断集合中是否有元素
	//boolean b = it.hasNext();
	//System.out.println(b);
	//接口的实现类对象,调用方法next()取出集合中的元素
	//String s = it.next();
	//System.out.println(s);

	//迭代是反复内容,使用循环实现,循环的条件,集合中没元素, hasNext()返回了false
	while(it.hasNext()){
		String s = it.next();
		System.out.println(s);
	}

	/*for (Iterator<String> it2 = coll.iterator(); it2.hasNext();  ) {  // for循环实现迭代器
		System.out.println(it2.next());
	}*/

}

三、增强for循环

JDK1.5新特性,增强for循环

JDK1.5版本后,出现新的接口 java.lang.Iterable,Collection接口是继承Iterable

增强for循环格式:

for( 数据类型 变量名 : 数组或者集合 ){

  sout(变量);

}

/*
 *  增强for循环遍历集合
 *  存储自定义Person类型
 */
public static void function_2(){
	ArrayList<Person> array = new ArrayList<Person>();
	array.add(new Person("a",20));
	array.add(new Person("b",10));
	for(Person p : array){
		System.out.println(p);
	}
}

public static void function_1(){
	//for对于对象数组遍历的时候,能否调用对象的方法呢?当然能,s就是遍历出的对象
	String[] str = {"abc","itcast","cn"};
	for(String s : str){
		System.out.println(s.length());
	}
}

/*
 *  实现for循环,遍历数组
 *  好处: 代码少了,方便对容器遍历
 *  弊端: 没有索引,不能操作容器里面的元素
 */
public static void function(){
	int[] arr = {3,1,9,0};
	for(int i : arr){
		System.out.println(i+1);
	}
	System.out.println(arr[0]);
}

四、泛型

泛型是JDK1.5出现新的安全机制,保证程序的安全性

  • 泛型: 指明了集合中存储数据的类型 <数据类型>
public static void function(){
	Collection<String> coll = new ArrayList<String>();
	coll.add("abc");
	coll.add("rtyg");
	coll.add("43rt5yhju");
	//coll.add(1);

	Iterator<String> it = coll.iterator();
	while(it.hasNext()){
		String s = it.next();
		System.out.println(s.length());
	}
}

1、带有泛型的类

/*
 *  带有泛型的类
 *    ArrayList
 *    E: Element 元素, 实际思想就是一个变量而已
 *    ArrayList<Integer> , E 接受到类型,就是Integer类型
 *    public class ArrayList<E>{
 *
 *       public boolean add(Integer e){
 *          elementData[size++] = e;
 *       }
 *
 *       public boolean add(E e){}
 *    }
 *
 *    Iterator<E>
 *    E next()
 *
 *    Iterator<Integer>
 *    Integer next()
 *
 */
public class GenericDemo1 {
	public static void main(String[] args) {
		ArrayList<Integer>  array = new ArrayList<Integer> ();
		array.add(123);
		array.add(456);
		// ArrayList集合,自己有个方法
		// <T> T[] toArray(T[] a)
		Integer[] i = new Integer[array.size()];
		Integer [] j = array.toArray(i);
		for(Integer k : j){
			System.out.println(k);
		}

	}
}

2、带有泛型的接口

public static void function(){
	Collection<String> coll = new ArrayList<String>();
	coll.add("abc");
	coll.add("rtyg");
	coll.add("43rt5yhju");
	//coll.add(1);

	Iterator<String> it = coll.iterator();
	while(it.hasNext()){
		String s = it.next();
		System.out.println(s.length());
	}
}

3、泛型的通配符

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

/*
 *  泛型的通配符
 */
public class GenericDemo {
	public static void main(String[] args) {
		ArrayList<String> array = new ArrayList<String>();

		HashSet<Integer> set = new HashSet<Integer>();

		array.add("123");
		array.add("456");

		set.add(789);
		set.add(890);

		iterator(array);
		iterator(set);
	}
	/*
	 *  定义方法,可以同时迭代2个集合
	 *  参数: 怎么实现 , 不能写ArrayList,也不能写HashSet
	 *  参数: 或者共同实现的接口
	 *  泛型的通配,匹配所有的数据类型  ?
	 */
	public static void iterator(Collection<?> coll){
		Iterator<?> it = coll.iterator();
		while(it.hasNext()){
			//it.next()获取的对象,什么类型
			System.out.println(it.next());
		}
	}
}

4、示例

/*
 *  将的酒店员工,厨师,服务员,经理,分别存储到3个集合中
 *  定义方法,可以同时遍历3集合,遍历三个集合的同时,可以调用工作方法
 */
import java.util.ArrayList;
import java.util.Iterator;
public class GenericTest {
	public static void main(String[] args) {
		//创建3个集合对象
		ArrayList<ChuShi> cs = new ArrayList<ChuShi>();
		ArrayList<FuWuYuan> fwy = new ArrayList<FuWuYuan>();
		ArrayList<JingLi> jl = new ArrayList<JingLi>();

		//每个集合存储自己的元素
		cs.add(new ChuShi("张三", "后厨001"));
		cs.add(new ChuShi("李四", "后厨002"));

		fwy.add(new FuWuYuan("翠花", "服务部001"));
		fwy.add(new FuWuYuan("酸菜", "服务部002"));

		jl.add(new JingLi("小名", "董事会001", 123456789.32));
		jl.add(new JingLi("小强", "董事会002", 123456789.33));

//		ArrayList<String> arrayString = new ArrayList<String>();
		iterator(jl);
		iterator(fwy);
		iterator(cs);

	}
	/*
	 * 定义方法,可以同时遍历3集合,遍历三个集合的同时,可以调用工作方法 work
	 * ? 通配符,迭代器it.next()方法取出来的是Object类型,怎么调用work方法
	 * 强制转换:  it.next()=Object o ==> Employee
	 * 方法参数: 控制,可以传递Employee对象,也可以传递Employee的子类的对象
	 * 泛型的限定  本案例,父类固定Employee,但是子类可以无限?
	 *   ? extends Employee 限制的是父类, 上限限定, 可以传递Employee,传递他的子类对象
	 *   ? super   Employee 限制的是子类, 下限限定, 可以传递Employee,传递他的父类对象
	 */
	public static void iterator(ArrayList<? extends Employee> array){

		 Iterator<? extends Employee> it = array.iterator();
		 while(it.hasNext()){
			 //获取出的next() 数据类型,是什么Employee
			 Employee e = it.next();
			 e.work();
		 }
	}
}

原文地址:https://www.cnblogs.com/x54256/p/8428436.html

时间: 2024-12-16 05:07:51

Java——集合(Collection接口),迭代器,增强for循环,泛型的相关文章

java集合Collection接口

collection集合 Map集合 Collection接口 Collection接口是List.Set和Queue接口的父接口,该接口里定义的方法既可用于操作Set集合,也可用于操作List和Queue集Collection提供了大量添加.删除.访问的方法来访问集合元素.主要的方法如下:

Java集合 - Collection

Ref:http://blog.csdn.net/liulin_good/article/details/6213815  http://www.cnblogs.com/averey/p/4306166.html 一.java.util.Iterator<E>接口 迭代器 1 package java.util; 2 3 public interface Iterator<E>{ 4 // Return true iteration has more elements 5 bool

java----数据结构与算法----JavaAPI:java.util.Collection接口

Java API--java.util.Collection接口 /** * @author chen * @date 20170317 * @description:本程序讲述Collection接口 * java.util.Collection * 概述:Collection接口是Set和List接口的父接口,Collection接口中定义了一些 * 用于集合元素操作的方法,被其子接口以及子接口的实现类所继承 * 构造函数 * java中接口不能有构造函数 * 成员函数: * [1]概述,由

Java集合Map接口与Map.Entry学习

Java集合Map接口与Map.Entry学习 Map接口不是Collection接口的继承.Map接口用于维护键/值对(key/value pairs).该接口描述了从不重复的键到值的映射. (1) 添加.删除操作: Object put(Object key, Object value): 将互相关联的一个关键字与一个值放入该映像.如果该关键字已经存在,那么与此关键字相关的新值将取代旧值.方法返回关键字的旧值,如果关键字原先并不存在,则返回null Object remove(Object

java关于集合的遍历与增强for循环(foreach)的使用

java集合类的使用可以说是无处不在,总的我们可以将之分为三大块,分别是从Collection接口延伸出的List.Set和以键值对形式作存储的Map类型集合. 许多情况需要我们遍历出集合中的元素,并做相应的处理. 下面对各种类型的集合的遍历做一些总结,关于增强for循环,需要注意的是,使用增强for循环无法访问数组下标值,对于集合的遍历其内部采用的也是Iterator的相关方法.如果只做简单遍历读取,增强for循环确实减轻不少的代码量. 关于List与Set类型集合的遍历: 1 import

java之Iterator迭代器 增强for循环

1.集合在存储元素时,如果未明确数据类型,可以存储object类型(各种数据),但在提取时,需要用一种通用的方法获得元素.这就是Iterator接口中的hasNext()/next()方法. 然而Iterator接口未有具体的实现类,但collection接口中有一个抽象的iterator()方法,可以得到 Iterator对象.并且collection所有子类都实现了这个方法. 1 //collection 继承Iterable中的Iterator的抽象方法: 2 Collection<Int

Java之Collection接口(集合)

集合概述 集合到底是什么呢?集合:集合是java中提供的一种容器,可以用来存储多个数据 集合和数组既然都是容器,它们有啥区别呢? 区别1: 数组的长度是固定的. 集合的长度是可变的. 区别2:  数组中存储的是同一类型的元素,可以存储基本数据类型值,也可以存储引用类型: 集合存储的都是对象.而且对象的类型可以不一致.在开发中一般当对象多的时候,使用集合进行存储. 学习集合的目标 会使用集合存储数据 会遍历集合,把数据取出来 掌握每种集合的特性 学习集合的方式 学习顶层:学习顶层接口或者抽象类中共

Java集合——List接口

1.定义 List是Collection的子接口,元素有序并且可以重复,表示线性表. 2.方法 boolean add(E e):在列表末添加元素 void add(int index, E e):在指定索引处添加元素 boolean addAll(int index, Collection e):在指定索引处放入集合 Object get(int index):获取指定索引的元素 int indexOf(Object o):获取指定元素在集合中的索引(第一次出现的元素) int lastInd

JavaSE入门学习38:Java集合框架之迭代器

一Iterator接口 迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层 结构.迭代器通常被称为"轻量级"对象,因为创建它的代价小. Java中的迭代器(Iterator)给我们提供了一种通用的方式来访问集合中的元素.可以知道的是,它只是提供了一个 接口,并没有提供真正的Iterator类.Iterator是对collection进行迭代的迭代器. Iterator接口定义了如下的方法: Java中的Iterator功能比较简单,并且只

Java集合--list接口

list是一个接口,实现类:Arraylist,Vector,Linkedlist list接口: 常用方法 排除Collection中具有的之外的 添加功能 void add(int index, E element):在指定位置添加元素 boolean addAll(int index, Collection<? extends E> c):在指定位置添加一组元素 判断功能 int indexOf(Object o):查找某个元素所在位置 int lastIndexOf(Object o)