CoreJava基础之集合框架(Collection/List/泛型)

1.概念:

集合:存储对象的容器

框架:别人帮我们写好的一些工具和程序

2.对比数组

数组 集合
对象容器 对象容器
有下标 有下标
长度固定(可扩容) 长度不固定
插入、删除麻烦 借助方法方便
连续的空间 连续的空间

3.关系总览

接口 特点 关系
Collection 元素是对象  
List 元素有序,可重复 Collection子接口
Set  元素无序,不可重复 Collection子接口

4.Collection:

(1)接口

(2)常用方法:

①add(Object o)把元素添加到集合中

②clear()清空集合

③Contains(Object o)判断元素是否存在

④remove(Object o)删除对象o

⑤size()返回集合长度

(3)实现类:无

Collection工具类:

(1)作用:

作用于集合,可以对集合中的元素进行排序

常用方法:

方法名 作用
public static void sort(List list) 将集合中元素按照升序排列整理
public static void reverse(List list) 将集合中的元素颠倒位置
public static void shuffle(List list) 将集合中的元素随机排列

例子:

package nearly.test;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;

public class ListToArrayList01 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub	
		List list=new ArrayList();
		list.add("zhangsi");
		list.add("9527");
		list.add("4399");
		list.add("4396");
		list.add("uzi");
		list.add("vn");
		//1.升序排列
		Collections.sort(list);
		//2.逆序排列
		Collections.reverse(list);
		//3.随机排列
		Collections.shuffle(list);
	}

}

5.List

(1)Collection子接口

(2)常用方法:

①add(int pos,Object o) 下标插入


import java.util.ArrayList;
import java.util.List;

public class ListToArrayList01 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		List list=new ArrayList();
		//1.添加对象到list集合
		list.add("255215");
		//2.添加元素到0下标
		list.add(0,"zhaosi");
	}

}

②remove(int pos)下标删除


package nearly.test;

import java.util.ArrayList;
import java.util.List;

public class ListToArrayList01 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		List list=new ArrayList();
		//3.删除下标元素
		list.remove(0);
	}

}

③set(int pos,Object o)下标替换

package nearly.test;

import java.util.ArrayList;
import java.util.List;

public class ListToArrayList01 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		List list=new ArrayList();
		//4.替换下标元素
		list.set(0, "9527");
	}

}

④get(int index)获取指定下标元素

package nearly.test;

import java.util.ArrayList;
import java.util.List;

public class ListToArrayList01 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		List list=new ArrayList();
		//5.获得指定下标元素
		list.get(0);
	}

}

(3)遍历

1.下标遍历

		List list=new ArrayList();
		list.add("zhangsi");
		list.add("9527");
		list.add("4399");
		list.add("4396");
		list.add("uzi");
		list.add("vn");
		//1.下标遍历
		for (int i = 0; i < list.size(); i++) {
			System.out.println(list.get(i));
		}

2.迭代器遍历

		List list=new ArrayList();
		list.add("zhangsi");
		list.add("9527");
		list.add("4399");
		list.add("4396");
		list.add("uzi");
		list.add("vn");
		//2.迭代器遍历
		Iterator it=list.iterator();
		while(it.hasNext()){
			System.out.println(it.next());
		}

3.for-each遍历

		List list=new ArrayList();
		list.add("zhangsi");
		list.add("9527");
		list.add("4399");
		list.add("4396");
		list.add("uzi");
		list.add("vn");
		//3.for-each遍历
		for (Object obj : list) {
			System.out.println(obj);
		}

(4)实现类

实现类 实现 查询 增删 版本发布 线程 效率
ArrayList 数组实现 查询快 增删慢 JDK1.2 线程不安全 并发效率高
LinkedList 链表实现 查询慢 增删快      
Vector 数组实现     JDK1.0 线程安全 并发效率低

6.泛型

作用:

限制集合中元素的一致性,提高集合的安全性

例:为集合添加泛型

List<String> list=new ArrayList<String>();

(1)泛型必须是类,不能是基本数据类型

//反面例子:
List<int>     //error!
//正面例子:
List<Integer> //ok!

(2)引用泛型和对象泛型必须一致,不支持多态

//反面例子:
List<Animal> list=new ArrayList<Dog>() //error!
//正面例子:
List<Dog> list=new ArrayList<Dog>() //ok!

(3)既然泛型不支持多态,对象泛型可以省略,由编译器自动推断

List<String> list=new ArrayList<>();

(4)如果没有为集合指定泛型,泛型默认为Object

泛型类:

模板编程:

class Myclass<T>{
    T可以是任何一种类型
    在声明引用及创建对象时赋值
    可以定义多个泛型,用逗号,隔开
}
interface MyIA<E,T>{
    void m1(E e);
}

泛型的通配符:

static void print(List<?> list)
?表示任何泛型

参数可以是泛型为Number或者某个子类

static void print(List<?extends Number> list)

参数可以是Double或者Double的父类

static void print(List<? super Double> list)

泛型方法:

定义位置:

修饰符之后,返回值之前

static<T> void  print(List<T> list){
  T  o=list.get(i);
   System.out.println(o); 
}

方法内部可以使用泛型T

①:

static < T extends Number> void print( List<T>  list)
T为Number或Number的子类

②:

static <T extends Number>

猜你喜欢

转载自blog.csdn.net/erpang7/article/details/81836703