集合1--List集合及泛型

——我是LGM_Hakka,请多多指教。

集合

集合概述:

可以存储任意类型的对象,并且长度是可变的,统称为集合。

集合按照其存储结构可以分为两大结构(常见的)


集合框架图:



List集合

1、特点:元素有序(是指存储和取出的顺序一样),元素可重复

2、List集合的特有方法,全部都是围绕索引来定义的。

3、List获取元素的方式有两种:

A、迭代: 

// 创建迭代器
Iterator iterator = list.iterator();
while (iterator.hasNext()) {
	Object object = (Object) iterator.next();
	System.out.println(object);
}

B、遍历+get:

for (int i = 0; i < list.size(); i++) {
	System.out.println("get[" + i + "]: " + list.get(i));
}

4、List中常用方法:

A:添加功能

void add( int index, Object obj ):向集合中的指定位置添加元素

B:删除功能

Object remove( int index ):删除集合中指定索引处的元素,返回被删除的元素值

C:修改功能

Object set( int index, Object obj ):用指定的元素替换指定索引位置的值,返回被替换的元素值

D:获取功能

Object get( int index ):获取集合中指定索引处的值

int indexOf( Object o ):获取指定元素在集合中第一次出现的索引

ListIterator<E> listIterator():列表迭代器

E:截取功能

List subList( int fromIndex, int toIndex):截取集合从指定位置开始到指定位置结束,返回截取出来的集合.

5、常用的实现类:

Vector:可以增长的数组结构。查询速度慢,增删速度慢。同步的,线程安全,效率非常低。已经被ArrayList替代。

ArrayList数组结构(原理:创建新数组+复制数组)。查询速度快,增删速度慢。不同步的,线程不安全,效率高

LinkedList:链接列表结构(链表)的。增删速度快,查询速度慢。不同步的,线程不安全,效率高

    可以用于实现堆栈、队列:

堆栈:先进后出【Frist In Last Out,即:FILO】。例如:枪支的弹夹

队列:先进先出【First In First Out,即:FIFO】。例如:火车站排队买票

集合与数组的区别:

l 数组的长度是固定的;

l 数组中存储的都是同一类型的元素;

l 数组可以存储基本数据类型值,也可以存储引用数据类型;

l 集合的长度是可变的;

l 集合只能存储引用数据类型;

l 同一个集合中,可以存储多种数据类型。

什么时候使用集合?

当对象多的时候,且不固定,先进行存储。 

细节

1、集合中存储的都是对象的地址;

2、集合是否可以存储基本数据类型?    

不可以。但是在jdk1.5之后,coll.add(1)可以这么写,但是其实际存储的还是对象。coll.add(1);  ---> coll.add(Integer.valueOf(1));自动装箱,即存储的是基本数据类型包装类对象。

3、在集合存储时,被提升为了Object类型,所以在取出时要使用元素的特有内容,必须向下转型。

泛型

在创建集合的时,就明确容器中的元素的类型,如同数组一样。这样能够更安全。jdk1.5以后,出现了这个方案,使用容器时,必须明确容器中的元素的类型;这种机制就称之为:泛型。

使用泛型的好处:

A、安全机制

B、将运行时期的ClassCastException类型转换异常,转移到编译时期。

C、泛型技术,是给编译器使用的技术。

D、解决了强制转换的麻烦。

F、优化程序设计

 

泛型的擦除机制:泛型仅在编译时其作用,编译完后将消失。

 

泛型的使用规则:

API中类或者接口名后边有<>那么就可以使用泛型。

泛型一般我们在集合中去使用

 

泛型的限定:

? extends E:接收E类型或者E类型的子类型。上限

? super E:接收E类型或者E的父类型。下限

 

增强for(foreach)循环

格式:

for(要遍历元素的数据类型   变量名   : 集合或数组的对象名) {

      直接使用变量名即可

}

***:增强for是为了取代迭代器的,所以说在用增强for遍历集合的过程中

对集合进行改变,也会出现并发修改异常.

 

综合练习

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

/*
 * 创建一个集合,实体用ArrayList实现。
 * 然后向集合添加5个字符串元素。
 * 分别是:“hello”,“world”,“shenzhen”,“ketang”,“best”。
 * 判断集合中是否存在"ketang"这个元素?
 */
public class ArrayListDemo {
	public static void main(String[] args) {
		// 创建ArrayList对象
		ArrayList<String> list = new ArrayList<String>();
		// 向ArrayList对象添加元素
		list.add("hello");
		list.add("world");
		list.add("shenzhen");
		list.add("ketang");
		list.add("best");

		// 定义一个变量,用于存储需要查找的对象
		String string = new String("ketang");
		// 定义一个变量,用于接收返回值
		boolean flag = findElement(list, string);
		// 打印
		System.out.println("list集合中包含\"" + string + "\"吗?" + flag);

		printArrayList(list);
	}

	/**
	 * 这是一个遍历集合的方法。
	 * 
	 * @param list
	 *            集合
	 */
	private static void printArrayList(ArrayList<String> list) {
		// //使用增强for循环,遍历集合
		// for (Object object : list) {
		// System.out.println((String)object);
		// }

		// 创建迭代器
		Iterator<String> it = list.iterator();
		System.out.println("集合中的元素有:");
		// 使用迭代器,遍历集合
		// hasNext(),如果指针后面还有元素,将返回true。若没有,返回false
		while (it.hasNext()) {
			String str = it.next();
			System.out.print(str + "  ");
		}

	}

	/**
	 * 这是一个查找集合中是否有指定对象
	 * 
	 * @param list
	 *            指定集合
	 * @param string
	 *            指定对象
	 * @return 返回是否存在
	 */
	private static boolean findElement(ArrayList<String> list, String string) {
		boolean flag = list.contains(string);
		return flag;
	}

}
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值