赵雅智_java 集合类

  1. (为什么要用)集合:容器,存储对象,长度可变
  2. (集合与数组的区别)数组:容器,存储对象或基本数据类型,长度不可变】
  3. 集合体系:
    Collection Set:无序,元素不重复 
      List:有序,元素可重复,通过角标操作 ArrayList:数组,查找快,插删慢
       LinkLst :链表,查找慢,插删块
       Vector :数组,都慢
       Stack  :先进后出

有限种类的集合类,来容纳无限种类的数据对象;用集合类来容纳不同种类的数据,这种容纳是建立在未知的基础上。

  • JAVA中集合类分类:三类
    1. 集(Set):
      • 和数学上的“集合”概念相对应,是最简单的一种集合。
      • Set集合中不区分元素的顺序。
      • Set集合中不包含重复元素,即任意的两个元素e1和e2都有e1.equals(e2)=false,并且最多有一个null元素。
    2. 列表(List):
      • List列表区分元素的顺序,能够精确的控制每个元素插入的位置,用户能够使用索引(元素在List中的位置)来访问List中的元素。
      • List允许包含重复元素。
    3. 映射(Map):
      • 保存的是“键-值”对信息,即Map中存储的每个元素都包括起标识作用的“键”和该元素的“值”两部分,查找数据时不需提供相应的“键”,才能查找到该“键”所映射的“值”。因此,Map集合中不能包含重复的“键”,并且每个“键”最多只能映射一个值。
  • 集合理放的是对象的地址

  • JDK集合框架常用API关系结构

斜体字:接口;实线箭头:继承关系;虚线箭头:实现关系

需注意:1.Java SDK不提供直接继承自Collection的类,Java SDK提供的类都是继承自Collection的“子接口”。

    2.Collection接口有多个子接口,其中最重要的两个java.util.Set和java.util.List分别描述集Set和列表List。

Collection接口:

  • 常用方法:
    • add (): 添加
    • addAll(): 全部添加
    • retaAll(): 2个集合的交集
    • public boolean add [E e]: 添加,成功返回true
    • public boolean remove (Object o): 删除
    • public boolean isEmpty(): 是否为空
    • public boolean contains(): 是否包含
    • public vpid clear(): 全部删除
    • public Object[] toArray(): 转数组
    • public int size(): 个数
      import java.util.*;
      class CollectionDemo 
      {
      	public static void main(String[] args) 
      	{
      		//创建一个容器
      		ArrayList al = new ArrayList();//Callection al = new ArrayList();
      		//添加元素
      		al.add("abc1");//字符串为引用类型
      		al.add("abc2");
      		al.add("abc3");
      		al.add("abc4");
      		System.out.println(al.size());//看看大小//4
      		System.out.println(al);//[abc1,abc2,abc3,abc4]
      		System.out.println(al.contains("abc3"));//t
      
      		al.remove("abc3");
      		System.out.println(al);//[abc1,abc2,abc4]
      
      		al.clear();
      		System.out.println(al.size());//0
      		System.out.println(al);//[]
      	}
      }
      
    • 遍历:
      • hasNext(): 是否有元素
      • next(): 下一个
      • remove(): 移除
        import java.util.*;
        class IteratorDemo 
        {
        	public static void iterator(){
        		ArrayList al = new ArrayList();
        		al.add("abc1");
        		al.add("abc2");
        		al.add("abc3");
        		al.add("abc4");
        
        		Iterator it = al.iterator();
        		//System.out.println(it.next());//abc1
        		while (it.hasNext())
        		{
        			System.out.print(it.next()+"  ");//abc1  abc2  abc3  anc4
        		}
        		System.out.println();
        		for(int i=0;i<al.size();i++){
        			System.out.print(al.get(i)+"  ");//abc1  abc2  abc3  abc4
        		}
        	}
        
        	public static void main(String[] args) 
        	{
        		iterator();
        	}
        }

java.util.List :

  • 列表结构,允许程序员对列表元素的插入位置进行精确控制,并增加了根据元素索引来访问元素、搜索元素等功能。
  • 继承父接口Collection的基础之上,新增的方法:
    • void add(int index, E element): 放第几个
    • boolean add(E e): 将对象e插入到列表最后
    • E remove(int index): 删除指定
    • boolean remove(Object o): 删除连表里第一个指定内容的元素
    • E get(int index): 遍历,返回Object
    • int size():元素个数,用在遍历里
    • int indexOf(Object obj): 返回某元素的位置,没有找到-1
    • List<E> subList(int fromIndex, int toIndex): 返回之间的值
    • void clear() :全部清除
      import java.util.*;
      class  ListDemo
      {
      	public static void main(String[] args) 
      	{
      		List l = new ArrayList();
      		l.add("abc1");
      		l.add("abc2");
      		l.add("abc3");
      		l.add("abc4");
      		System.out.println(l);//[abc1,abc2,abc3,abc4]
      		l.add(1,"qq");//添加
      		System.out.println(l);//[abc1,qq,abc2,abc3,abc4]
      		l.remove(0);//删除//
      		System.out.println(l);//[qq,abc2,abc3,abc4]
      		System.out.println(l.indexOf("abc3"));//返回下标//2
      		List l2 = l.subList(1,3);
      		System.out.println(l2);//[abc2,abc3]
      		System.out.println(l.get(2));//abc3
      		for(int i=0;i<l.size();i++){
      			System.out.print(l.get(i)+"  ");//qq  abc2  abc3  abc4
      		}
      	}
      }
      
  • Java.util.List接口的实现类有多个,分别体现了列表的不同分化形式。
    1. ArrayList
    2. LinkedList
      • 数组:逻辑上相邻的两个元素在物理上也是相邻的         内容 增删慢,查找块
        链式:逻辑上相邻的两个元素在物理上不相邻,通过“链条”连接  地址 增删块,查找慢

      • 构造方法:
        • LinkedList()
        • LinkedList(Collection c)
        • LinkedList(<E>c)
      • 其他方法:
        • 添加:void addFirst(E obj)、void addLast(E obj); 找不到抛异常。offer,找不到返回Null
        • 获取:E getFirst()、Object getLast(); peek
        • 删除:E removeFirst、Object removeLast(); poll
          import java.util.*;
          class LinkedListDemo 
          {
          	public static void main(String[] args) 
          	{
          		LinkedList l = new LinkedList();
          		l.addFirst("abc1");
          		l.addFirst("abc2");
          		l.addFirst("abc3");
          		l.addFirst("abc4");
          		System.out.print(l);//[abc1,abc2,abc3,abc4]
          		System.out.println();
          
          		//l.addLast("abc1");
          	//	l.addLast("abc2");
          	//	l.addLast("abc3");
          		//l.addLast("abc4");
          		//System.out.print(l);//[abc4,abc3,abc2,abc1]
          		//System.out.println();
          
          		System.out.println(l.getFirst());//4
          		System.out.println(l.getFirst());//4
          
          		System.out.println(l.removeFirst());//4
          		System.out.println(l.removeFirst());//3
          
          		while (!l.isEmpty())//是否为空
          		{
          			System.out.print(l.removeFirst());//全删,会输出//2,1
          		}
          
          	}
          }
    3. Vector
      • 向量
      • 构造方法:
        • Vector():空,初始值为10
        • Vector(int initialCapacity):指定初始容量,0容量增量
        • Vector(int int initialCapacity,int capacityIncrement):全初始
        • Vector(<E> c):泛型
      • 其他方法:
        • addElement(E obj):添加
        • insertElementAt(E obj,intindex):指定添加
        • setElementAt(E obj,intindex):替换指定
        • boolean removeElement(Object obj):删除第一个
        • void removeElementAt(int index):删除指定
        • void removeAllElement():删除所有
        • int size():长度
        • E elementAt(int index):依次访问
          import java.util.*;
          class VectorDemo 
          {
          	public static void main(String[] args) 
          	{
          		Vector v = new Vector();
          		v.addElement("one");
          		v.addElement("tow");
          		v.addElement("three");
          		System.out.println(v);
          		for(int i=0;i<v.size();i++){
          			System.out.println(v.elementAt(i));
          		}
          		v.insertElementAt("zero",0);
          		System.out.println(v);
          		v.insertElementAt("another three",3);
          		System.out.println(v);
          		v.setElementAt("four",4);
          		System.out.println(v);
          		v.removeAllElements();
          		System.out.println(v);
          	}
          }

    4. Stack
      • Stack是Vector类的子类
      • 特点: “后进先出”(Last In First Out)类型的容器,即最后一个被“压(push)”进堆栈中的对象,会被第一个“弹(pop)”出来。
      • 构造方法
        • Stack() :用于创建支持“后进先出”访问方式的对象 例:Stack st=new Stack(); Stack <String> st = new Stack();
      • 其他方法
        • E peek() :返回栈顶元素,但没有弹出栈顶元素
        • E pop() :弹出栈顶元素,并返回其中的对象。
        • E push(E item) :向堆栈顶端压入item对象,同时将item对象返回。
        • boolean empty() :判断堆栈是否为空,如果该堆栈为空,返回true,反之返回false。
          import java.util.*;
          class StackDamo 
          {
          	public static void main(String[] args) 
          	{
          		Stack st = new Stack();  //Stack <String> st = new Stack(); 
          		st.push("First Element");
          		st.push("second Element");
          		st.push("third Element");
          		while(st.empty() != true){
          			System.out.println(st.pop().toString());
          			//System.out.println(st.peek().toString());、、死循环
          			}
          			//不好的用法,把堆栈当成Vector用
          			int i = 0;
          			st.addElement("bad usage1");
          			st.addElement("bad usage2");
          			st.addElement("bad usage3");
          			//破坏了堆栈的特性
          			for(i=0;i<st.size();i++){
          				System.out.println(st.elementAt(i));
          			}
          	}
          }

课后作业:

使用LinkedList模拟一个队列

//duilie
import java.util.*;
import java.lang.*;
class  MyStack
{
	private LinkedList link;
	public MyStack(){
		link=new LinkedList();
	}

	public void myAdd(Object obj){
		link.addLast(obj);
	}

	public Object myGet(){
		return link.removeFirst();
	}

	public boolean isNull(){
		return link.isEmpty();
	}

}

class Test
{
	public static void main(String []args){
		MyStack st=new MyStack();
		st.myAdd("one");
		st.myAdd("two");
		st.myAdd("three");
		st.myAdd("four");
		while(!st.isNull()){
			System.out.println(st.myGet());
		}

	}

}

使用LinkedList模拟一个堆栈

import java.util.*;
import java.lang.*;
class  MyStack
{
	private LinkedList link;
	public MyStack(){
		link=new LinkedList();
	}

	public void myAdd(Object obj){
		link.addFirst(obj);
	}

	public Object myGet(){
		return link.removeFirst();
	}

	public boolean isNull(){
		return link.isEmpty();
	}

}

class Test
{
	public static void main(String []args){
		MyStack st=new MyStack();
		st.myAdd("one");
		st.myAdd("two");
		st.myAdd("three");
		st.myAdd("four");
		while(!st.isNull()){
			System.out.println(st.myGet());
		}

	}

}



 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值