java类集

在java中必须掌握的知识点,会开发的:
1.面向对象
2.java的类集
3.java IO
4.JDBC

本章目标:
*掌握java设置类集框架的目的
*掌握类集中的各个主要的接口
*掌握Collection接口的作用

类集的作用
类集实际上就是一个动态的对象数组,与一般的对象数组不同,类集上的对象内容可以任意扩充
类集的特征:
*这种框架是高性能的
*框架必须允许不是同类型的类集一相同的方式和高度互相操作方式工作
*类集必须是容易扩展和修改的

对象数组中包含一组对象,但是对象数组的使用的时候存在一个长度的限制,那么类集是专门解决这种限制的,使用类集可以方便的向数组中增加任意多个数据
对象数组的操作中基本上都要保证对象类型的一致性,对于类集而言其本身内部的元素也应该保持一致,不管是何种类型的数据,所有的操作方式都应该是一样的

类集框架的主要接口
java类集
以上的接口必须全部掌握,并且掌握各个接口的主要特点。

接口的继承关系
java类集

Collection接口的使用注意
在一般的开发中,往往很少直接使用Connection接口进行开发,而基本上都是使用期子接口,子接口主要有:List、Set、Queue、SortedSet

Collection子接口的定义
java类集

1.1 List接口
Connection下分为很多的子接口,其中有一个List接口,List接口中可以存放任意的数据,而且在List接口中内容是允许重复的。
List接口的功能要比Collection接口强太多,因为大量扩充了Collection接口的操作
public interface List extends Collection

List接口的扩展方法
java类集

List接口的常用子类——ArrayList
java类集
如果想用接口,则肯定要使用对象的多态性进行实例化的操作,那么对于List接口本身也是一样的
ArrayList是List中最常用的子类

package Listdemo;

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

 public class ArrayListDemo01 {
public static void main(String[] args) {
	
	List<String> allList = new ArrayList<String>();		//制定操作的泛型为String
	allList.add("hello");		//此方法由Collection接口而来
	allList.add("world");		//默认情况下向最后加入
	System.out.println(allList);
	
}

}
运行结果:
[hello,world]

在指定位置添加,添加的方法是List接口扩充的方法
package Listdemo;

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

public class ArrayListDemo01 {
public static void main(String[] args) {
	
	List<String> allList = null;		
	Collection<String> allCollection = null;
	
	allList = new ArrayList<String>();		//制定操作的泛型为String
	allCollection = new ArrayList<String>();		//指定一个集合
	
	allList.add("hello");		//此方法由Collection接口而来
	allList.add(0,"world");		//在第一个位置添加world
	System.out.println(allList);
	
	allCollection.add("CZK");
	allCollection.add("www.baidu.com");
	
	allList.addAll(allCollection);
	
	System.out.println(allList);
	
}

}
运行结果:
[world, hello]
[world, hello, CZK, www.baidu.com]

package Listdemo;

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

public class ArrayListDemo01 {
public static void main(String[] args) {
	
	List<String> allList = null;		
	Collection<String> allCollection = null;
	
	allList = new ArrayList<String>();		//制定操作的泛型为String
	allCollection = new ArrayList<String>();		//指定一个集合
	
	allList.add("hello");		//此方法由Collection接口而来
	allList.add(0,"world");		//在第一个位置添加world
	System.out.println(allList);
	
	allCollection.add("CZK");
	allCollection.add("www.baidu.com");
	
	allList.addAll(allCollection);
	allList.addAll(0,allCollection);
	
	System.out.println(allList);
	
}

}
运行结果:
[world, hello]
[CZK, www.baidu.com, world, hello, CZK, www.baidu.com]

既然可以增加数据,那么也可以删除数据
*List中存在两种删除:根据对象内容,根据对象的编号

package Listdemo;

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

public class ArrayListDemo02 {
public static void main(String[] args) {
	List<String> allList = new ArrayList<String>();		//指定操作的泛型为String
	
	allList.add("Hello");		//此方法由Collection接口而来
	allList.add(0,"world");		//在第一个位置添加新的内容
	allList.add("MLDN");		//向Collection中加入内容
	allList.add("www.baidu.com");		
	
	allList.remove(0);	//删除第一个元素,删除指定的位置
	allList.remove("Hello");	//此方法由Collection接口继承而来
	
	System.out.println(allList);
}

}
运行结果:
[MLDN, www.baidu.com]

集合中的内容可以添加可以删除,那么实际上最重要的就是输出
*在List接口中提供了get()方法,利用此方法就可以完成输出
*通过循环完成输出,循环的次数由size()方法取得

package Listdemo;

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

public class ArrayListDemo03 {
public static void main(String[] args) {
	List<String> allList = new ArrayList<String>();		//指定操作的泛型为String
	
	allList.add("Hello");		//此方法由Collection接口而来
	allList.add("Hello");
	allList.add(0,"world");		//在第一个位置添加新的内容
	allList.add("MLDN");		//向Collection中加入内容
	allList.add("www.baidu.com");		
	
	System.out.print("由前向后输出:" );
	for(int i = 0;i < allList.size();i++) {
		System.out.print(allList.get(i) + "、");
	}
	
	System.out.println();
	
	System.out.print("由后向前和输出:");
	for(int i = allList.size() - 1;i >= 0;i--) {
		System.out.print(allList.get(i) + "、");
	}
}

}
运行结果:
由前向后输出:world、Hello、Hello、MLDN、www.baidu.com
由后向前和输出:www.baidu.com、MLDN、Hello、Hello、world、
此种输出方式是List接口所独有的,而其他接口是没有的,尤其是Collection中是没有根据索引取来内容的操作的。

package Listdemo;

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

public class ArrayListDemo04 {
public static void main(String[] args) {
	List<String> allList = new ArrayList<String>();		//指定操作的泛型为String
	
	allList.add("Hello");		//此方法由Collection接口而来
	allList.add(0,"world");		//在第一个位置添加新的内容
	allList.add("MLDN");		//向Collection中加入内容
	allList.add("www.baidu.com");		
	
	String str[] = allList.toArray(new String[] {} );		//指定好类型
	
	System.out.print("指定数组类型:" );
	for(int i = 0;i < str.length;i++) {
		System.out.print(str[i]+ "、");
	}
	
	System.out.print("\n返回对象数组:");
	Object obj[] = allList.toArray();		//返回Object类型
	for(int i = 0;i < obj.length;i++) {
		String temp = (String)obj[i];
		System.out.print(temp + "、");
	}
}

}
既然已经完成基本的输出功能,集合还有以下几种操作:
*判断集合是否为空:boolean isEmpty();
*截取部分集合:List subList(int fromIndex,int toIndex) List接口扩充
*查找指定的对象是否存在:int indexOf(Object o),如果查找到则返回位置,否则返回-1;
*查找是否存在:boolean contains(Object o)

package Listdemo;

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

public class ArrayListDemo05 {
public static void main(String[] args) { 
	List<String> allList = new ArrayList<String>();		//指定操作的泛型为String
	
	System.out.println("集合操作前是否为空?" + allList.isEmpty());
	
	allList.add("Hello");		//此方法由Collection接口而来
	allList.add(0,"world");		//在第一个位置添加新的内容
	allList.add("MLDN");		//向Collection中加入内容
	allList.add("www.baidu.com");		
	
	System.out.println(allList.contains("Hello") ?"\"Hello\"字符串存在!" : "\"Hello\"字符串不存在");
	
	List<String> allsub = allList.subList(2,3);
	System.out.println("集合截取:");
	for(int i = 0;i <allsub.size();i++) {
		System.out.println(allsub.get(i));
	}
	
	System.out.println("MLDN字符串的位置:" +allList.indexOf("MLDN"));
	System.out.println("集合操作前是否为空?" + allList.isEmpty());
}

}
运行结果:
集合操作前是否为空?true
"Hello"字符串存在!
集合截取:
MLDN
MLDN字符串的位置:2
集合操作前是否为空?false

1.2、LinkedList类
本章目标:
*掌握LinkedList与List接口的关系
*掌握Queue接口的作用

LinkedList子类与Queue接口
java类集

Queue接口定义的方法
java类集

LinkedList中操作链表的部分方法
java类集

本身带来那个扩充了Queue接口和List接口的操作。所以,在使用时最好直接使用LinkedList类完成操作。
为链表的开发和结尾增加数据

package linkedlistdemo;

import java.util.LinkedList;

public class LinkedListDemo01 {
public static void main(String[] args) {
	LinkedList<String> link = new LinkedList<String>();
	
	link.add("a");
	link.add("b");
	link.add("c");
	
	System.out.println("初始化链表:" +link);
	
	link.addFirst("X");		//在开头增加数据
	link.addLast("Y");		//在结尾增加数据
	System.out.println("增加开头和结尾之后的链表:" + link);
}

}
运行结果:
初始化链表:[a, b, c]
增加开头和结尾之后的链表:[X, a, b, c, Y]

对于链表也可以找到表头

package linkedlistdemo;

import java.util.LinkedList;

public class LinkedListDemo02 {
public static void main(String[] args) {
	LinkedList<String> link = new LinkedList<String>();
	
	link.add("a");
	link.add("b");
	link.add("c");
	
	System.out.println("1-1、element()方法找到表头:" +link.element());
	System.out.println("1-2、找完之后的链表内容:" + link);
	
	System.out.println("2-1、peek()方法找到表头:" +link.peek());
	System.out.println("2-2、找完之后的链表内容::" +link);
	
	System.out.println("3-1、poll()方法找到表头:" +link.poll());
	System.out.println("3-2、找完之后的链表内容:" +link);
	
}

}
运行结果:
1-1、element()方法找到表头:a
1-2、找完之后的链表内容:[a, b, c]
2-1、peek()方法找到表头:a
2-2、找完之后的链表内容::[a, b, c]
3-1、poll()方法找到表头:a
3-2、找完之后的链表内容:[b, c]

既然此类实现可Queue接口,那么来说就可以按照队列的方法进行先进先出的操作

package linkedlistdemo;

import java.util.LinkedList;

public class LinkedListDemo03 {
public static void main(String[] args) {
	LinkedList<String> link = new LinkedList<String>();
	
	link.add("a");
	link.add("b");
	link.add("c");
	
	System.out.print("以先进先出(FIFO)的方式输出:");
	for(int i = 0;i<=link.size() + 1;i++) {
		System.out.print(link.poll() + "、");
	}
}

}
运行结果:
以先进先出(FIFO)的方式输出:a、b、c、