集合的基本内容

集合的由来以及集合的家主(继承体系)

1、集合的由来

数组长度固定,当需要正价或减少元素时,数组需要重新定义,java内部提供了集合类,能存储任意对象,长度可以改变随着元素的增加或减少发生变化。

2、数组和集合的区别

1.数组可以存储基本数据类型,也可以存储可以类型。

集合只能存储应用数据类型(对象)

2.数组长度是固定的,不可自增或自减

集合长度可变,可以根据元素增长而变化。

3、什么时候使用

1.如果元素个数固定,用数组。

2.如果元素个数不固定,拥集合。

4、集合框架Collection集合的基本功能测试

boolean add(E e);添加

boolean remove(Object  obj);删除

boolean clear();清空

boolean contains(Object o);比较

boolean isEmpty();判断是否有内容

int size();元素数

注意:CollectionXxx.java使用了未经检查或不安全的操作

        要了解详细信息,使用——Xlint;unchecked重新编译

        java编译器任务该程序存在安全隐患(这不是编译失败,可以不要理会)

5、Collection集合中带ALl功能

addAll 添加所有

removeAll 删除所有

containsAll         比较所有

retainAll            

package com.demo.cn;

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

public class Demo7 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Collection c=new ArrayList<>();
		c.add("abc");
		c.add(true);
		c.add(100);
		
		Collection c2=new ArrayList<>();
		c2.add(99);
		c2.add(100);
		System.out.println(c.retainAll(c2));//去c和c2的交集,如果没有c会被清空
		System.out.println(c);
		System.out.println(c2);
	}

}

6、集合的遍历之迭代器(interator)

迭代器:集合是用来存储元素的,存储的元素需要查看,那就需要迭代器来迭代。

hasNext();判断是否有元素,有为true;

next();提取元素

向下转型


	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Collection coll=new ArrayList<>();
		coll.add(new Student("张三",23));
		coll.add(new Student("李四",24));
		coll.add(new Student("王五",25));
		
		Iterator it=coll.iterator();//判断迭代器是否有元素,有返回true
		while(it.hasNext()) {
			
			Student s=(Student) it.next();
			System.out.println(s.getName()+"   "+s.getAge());
		}
		
	}

}

7、List集合特有的功能和概述

void add(int index,E element);指定下标位置添加内容

E removt(int index);指定下标位置删除

E get(int index);        指定下标位置查看

E set(int index,E element);指定下标位置修改

list集合是通过下标删除(remove)Integer i=111;也可以通过i删除。

ListIterator可以在遍历过程中添加内容

ListIterator中方法

biilean hasNext();是否有下一个;

biilean hasPrevious();是否有前一个;

Object next();返回下一个元素;

Object Previous();返回上一个元素;

Vector细节

vector和arrayList底层都是数组

Vertor是线程安全(因为同步)

arrayLIst是线程不安全的

Vector特有功能

public void addElement(E obj);在末尾添加元素大小加1;

public E elementAt(int index);返回指定索引处组件

public Enumeration element();返回此向量主键的枚举

Vector

package com.demo.cm;

import java.util.ArrayList;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
import java.util.Vector;

public class Demo4 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//Vector集合,线程安全
	Vector v=new Vector();
	v.addElement("a");
	v.addElement("b");
	v.addElement("c");
	v.addElement("d");
	//迭代
	Enumeration en=v.elements();//获取枚举
	while(en.hasMoreElements()) {//判断集合中是否含有元素
		System.out.println(en.nextElement());//获取集合中元素
		
	}
	}

}

无法对遍历中的元素进行更改

数组结构之数组和链表

数组:查询快,修改快

链表:查询慢,修改慢,增加快删除快

LIst的三个子类的特点:(面试题)

ArrayList:底层是数组结构,查询快,修改快,增加慢,删除慢,线程不安全,效率低

Vector:底层是数组结构,查询快,修改快,增加慢,删除慢,线程安全,效率略低。

Vector相对ArrayList查询慢,因为Vector线程安全。

Vector相对LinkedList增删慢(数组结构)

LinkdeList:底层是链表结构,查询慢,修改慢,增加快,删除快,线程不安全,效率高。

Vector和ArrayList的区别:

Vertor是线程安全,效率低

ArrayList是线程不安全,效率高。

ArrayList和LinkedList的区别:

ArrayList底层是数组结构,查询、修改快。

LinkedList底层是链表结构,删除、添加快。

查询多:ArrayList

增删多:LinkedList

如果都多:ArrayLIst

Vector只有在面试的时候使用,

ArrayLIst中重复字符串去除

remove和contains底层都是equls

package com.demo1.cn;

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

public class Demo1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		ArrayList a=new ArrayList();
		a.add(new Student("张三",23));
		a.add(new Student("张三",23));
		a.add(new Student("李四",24));
		a.add(new Student("李四",24));
		a.add(new Student("王五",25));
		System.out.println(a);
		ArrayList newa=getString(a);
		System.out.println(newa);
		
	}

	private static ArrayList getString(ArrayList a) {
		// TODO Auto-generated method stub
		//1创建一个新集合
		ArrayList newa=new ArrayList();
		//2.获取迭代器
		Iterator it=a.iterator();
		//3.判断集合中是否有元素
		while(it.hasNext()) {
			//将每一个元素临时记录
			Object obj=it.next();
			if(!newa.contains(obj)) {
				newa.add(obj);
			}
		}
		return newa;
	}

}



package com.demo1.cn;

import java.util.Objects;

public class Student{
	private String name;
	private int age;
	public Student(String name,int age){
		this.name=name;
		this.age=age;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	//重写equals底层
	@Override
	public boolean equals(Object obj) {
		Student s=(Student)obj;
		return this.name.equals(s.name)&&this.age==s.age;
	}
	@Override
	public String toString() {
		return "Student [name=" + name + ", age=" + age + "]";
	}
	
		

}

LinkedLIst的特有功能

public void addFirst(E e)以及addLast(E e)添加第一个或最后一个元素。

public E getFIrst()以及getLAst();获取第一个或最后一个元素。

public E removeFirst()以及removeLast();删除第一个元素或删除最后一个元素。被删除的元素会返回。

public void get(int index);获取下标(底层运算)。

栈和队列数据结构

栈:先进后出

队列:先进先出

底层封装:先进后出

package com.demo1.cn;

import java.util.LinkedList;

public class Stack {
private LinkedList list=new LinkedList();

//模拟进栈
public void in(Object obj) {
	list.add(obj);
}
//模拟出栈
public Object out() {
	return list.removeLast();
}
//判断是否为空
public  boolean isEmpty() {
	return list.isEmpty();
}
}

package com.demo1.cn;

public class Demo2 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Stack s=new Stack();
		s.in("a");
		s.in("b");
		s.in("c");
		s.in("d");
		s.in("a");
		s.in("b");
		while(!s.isEmpty()) {
			System.out.println(s.out());
		}
	}

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值