集合与框架
一、数组存储的缺点
1、数组一旦初始化后,其长度和类型就确定了:
2、数组中提供的方法有限、对于增删改等操作不方便,效率也不高
3、能够解决有序、可重复,但对于无序和不可重复的需求时,不能够满足基本概念
当需要在Java程序中记录单个数据内容时,则声明一个变量即可当需要在Java程序中记录多个类型相同的数据内容时,则声明一个一维数组即可当需要在Java程序中记录多个类型不同的数据内容时,则创建一个对象即可; 当需要在Java程序中记录多个类型相同的对象数据时,则创建一个对象数组即可;当需要在Java程序中记录多个类型不同的对象数据时,则准备一个集合即可;
public class CollectionTestTest {
@Test
public void collection (){
//接口类型的引用指向实现对象,形成多态
Collection collection = new ArrayList();
//[]
System.out.println(collection);
//向集合中添加元素,该方法的形参要求是Object类型
boolean b = collection.add("one");
//true
System.out.println("b = " + b);
//[one,2]
collection.add(2);
collection.add('a');
collection.add("Z");
System.out.println(collection);
}
}
二、Connect集合
常用方法
向集合中添加对象 - boolean add(E e)
判断是否包含指定对象 - boolean contains(Object o) 从集合中删除对象 - boolean remove(Object o)
清空集合 - void clear();
返回包含对象的个数 - int size();
判断是否为空 - boolean isEmpty);
将集合转换成数组 - Object[] toArray(); -
将数组转换成集合:
遍历集合中的元素Iterator<E> iterator() Iterator对象称为迭代器,主要用于遍历collection集合中的元素.boolean hasNext()如果仍有元素可以迭代,则返回 true。 返回迭代的下一个元素E next ()
注意:集合对象每次调用iterator()方法都得到一个全新的迭代器对象,默认游标都在集合的第一个元素之前。使用foreach循环遍历集合元素-JDK1.5提供,可以迭代访问collection和数组
遍历时不需要获取collection或数组的长度,也不需要使用索引访问
本质上,底层也是调用iterator
格式
for(要遍历的元素类型 遍历后自定义元素名称 :要遍历的结构名{ System.ou.println(遍历后自定义元素名称); }
public class CollectionTestTest {
@Test
public void collection (){
//接口类型的引用指向实现对象,形成多态
Collection collection = new ArrayList();
//[]
System.out.println(collection);
//向集合中添加元素,该方法的形参要求是Object类型
boolean b = collection.add("one");
//true
System.out.println("b = " + b);
//[one,2]
collection.add(2);
collection.add('a');
collection.add("Z");
System.out.println(collection);
System.out.println("-------------");
//判断是否包含对象
b = collection.contains("two");
System.out.println("b = " + b);
b = collection.contains("one");
System.out.println("b = " + b);
//判断是否为空
b = collection.isEmpty();
System.out.println("b = " + b);
b = collection.remove("one");
System.out.println("b = " + b);
System.out.println("集合中的元素有 " + collection);
Object[] object = collection.toArray();
//遍历数组中的元素
for (int i=0; i< object.length;i++){
System.out.println(object[i]);
}
//将数组转换成集合
List<Object> object1 = Arrays.asList(object);
System.out.println(object1);
Iterator it = object1.iterator();
while (it.hasNext() == true){
Object obj = it.next();
System.out.println(obj);
}
System.out.println("~~~~~~~~~~~~~~~~");
//遍历集合中的元素3 加强for循环
for (Object o:object1){
System.out.println(o);
}
}
三、List集合
基本概念
java.util.List集合是Collection集合的子集合,该集合中允许有重复的元素并且有先后放入次序该集合的主要实现类有: ArrayList类、LinkedList类、Stack类、Vector类。 其中ArravList类的底层是采用动态数组进行数据管理的,支持下标访问,增删元素不方便其中LinkedList类的底层是采用双向链表进行数据管理的,访问不方便,增删元素方便。其中Stack类的底层是采用动态数组进行数据管理的,该类主要用于描述一种具有后进先出特征的数据结构,叫做栈(lastin first out LIFO)。
其中Vector类的底层是采用动态数组进行数据管理的,该类与ArravList类相比属于线程安全的类,效率比较低。
public class ListTestTest {
@Test
public void LsitTest() {
List list = new ArrayList();
int size = list.size();
System.out.println(size);
System.out.println(list);
list.add(0,"one");
list.add(1,2);
list.add(2,9.99);
list.add(3,'x');
System.out.println(list);
List list1 = new ArrayList();
list1.add("two");
list1.add(10);
list.add(list1);
System.out.println(list);
System.out.println("--------------");
Object o = list.get(3);
System.out.println(o);
o = list.set(0,1);
System.out.println("下标为0的元素修改为" + o);
System.out.println(list);
//获取lsit,前闭后开
List list2 = list.subList(0,3);
System.out.println("lsit = " + list);
System.out.println("list2 = " + list2);
list2.remove(0);
System.out.println("lsit = " + list);
System.out.println("list2 = " + list2);
}
}
https://zhuanlan.zhihu.com/p/657697791subList的踩坑: https://zhuanlan.zhihu.com/p/657697791
四、Queue集合
基本概念
java.util.Queue集合是Collection集合的子集合,与List集合属于平级关系。该集合的主要用于描述具有先进先出特征的数据结构,叫做队列(firstin firstout FIFO)该集合的主要实现类是LinkedList类,因为该类在增删方面比较有优势。
常用的方法
boolean add(E,e) - 将指定的元素插入此队列 (如果立即可行目不会反容量限制)在成功时返回 true,如果当前没有可用的空间,则抛出 IIlegalstateException。 E element()- 获取,但是不移除此队列的头。
boolean offer(E ,e) 将指定的素插入此队列(如果立即可行不会反容量限制),当使用有容量限,制的队列时,此方法通常要优于 add(E),后者可能无法插入元素,而只是抛出一个异常。
public class QueueTestTest {
@Test
public void queueTest(){
Queue<Integer> q = new LinkedList();
for (int i=1; i < 5;i++){
q.offer(i*11);
System.out.println(q);
}
Integer it = q.peek();
System.out.println("队首元素" + it);
int len = q.size();
for (int i=1; i<len;i++){
Integer it1 = q.poll();
System.out.println(it1);
}
}
}