day14-集合

集合

什么是数据结构

数据结构就是计算机存储和组织数据的方式

其实就是对数据进行增删改查操作

不同的数据结构底层的采用不同的存储方法(算法),操作的时候效率不一样,有一些比较快,有一些添加比较快等

常见的数据结构:

数组(Array)、链表(Linked List)、Hash(哈希表)、栈(Stack)、队列(Queue)、树(Tree)、图(Graph)、堆(Heap)

ArrayList的特点

ArrayList增删慢,改查快

LinkList增删快,改查慢

ArrayList\Vector\Stack的区别

Vector类:基于数组实现的列表,其实就是ArrayList的前身

ArrayList类:使用了synchronized修饰,相对于Vector类来说,线程比较安全,但是效率低了

Stack类:栈,是Vector的子类,具有先进先出的特征,push(压栈),pop(出栈)

ArrayList的常用方法

常用的四大方法------增加:add、删除:remove、修改:set、查询:get

方法作用
public boolean add(E e)添加
public void add(int index,E element)插入指定索引数据
public boolean addAll(Collection<? extends E> c)添加Collection接口对象数据
public E remove(int index)删除指定索引数据
public boolean removeAll(Collection<?> c)删除Collection接口对象数据
public E set(int index,E element)修改指定索引数据
public int size()获得集合长度
public boolean isEmpty()查看集合是否为空
public E get(int index)获得指定索引数据
public Object[] toArray()把集合转换成Object数组
public boolean contains(Object o)查看集合是否存在指定数据

泛型的定义和使用

定义:使用标识符来表示类型

使用:创建对象的时候给定类型

实际上底层实现就是Object强转

E-Element(在集合中使用,因为集合中存放的是元素)

T-Type(Java类)

K-Key(键)

V-Value(值)

N-Number(数值类型)

?-表示不确定的java类型

Iterator的常用方法

方法作用
boolean hasNext()查看迭代器是否有更多元素,如果有返回true,没有返回false
E next()迭代获取下一个元素
default void remove()从底层集合中删除此迭代器返回的下一个元素

实现Collection接口对象的三种迭代方式

public static void main(String[] args) {
		List<String> list = new ArrayList<String>();
		list.add("张三");
		list.add("李四");
		list.add("王五");
		//for
		for (int i = 0; i < list.size(); i++) {
			String string = list.get(i);
			System.out.println(string);
		}
		System.out.println("--------------");
		//foreach
		for (String string : list) {
			System.out.println(string);
		}
		//java 1.8foreach
		System.out.println("--------------");
		list.forEach((k)->{
			System.out.println(k);
		});
		//iterator
		System.out.println("--------------");
		Iterator<String> iter = list.iterator();
		while(iter.hasNext()) {
			String next = iter.next();
			System.out.println(next);
		}
	}

Set、List、Map的区别

List和Set的父类接口都为Conllection,而Map没有继承Collection父接口,严格意义看Map不是 集合

只有继承了Collection接口才能生产迭代器进行迭代操作

list有序,允许重复元素,常用类ArrayList和LinkedList

  1. ArrayList:增删慢,改查快

  2. LinkedList增删快,查改慢

set无序,不允许元素重复,常用类HashSet和TreeSet

  1. HashSet使用hash算法,擅长操作等值查询
  2. TreeSet使用红黑树算法,擅长范围查询

map双元素集合,一次性保存key和value值,key不允许重复,value允许重复,常用类HashMap和TreeMap

  1. HashMap采用hash算法擅长等值查询
  2. 采用红黑树算法擅长范围查询

List集合添加使用add;删除使用remove;修改使用set;查询使用get

Set集合添加使用add;删除使用remove;修改先删除再增加实现修改操作;查询通过迭代器查询

Map添加键值对使用put;获取键的值使用get;修改key使用相同的名字value值不相同即可;删除使用remove

Set集合如何判断应用类型是否相同

set添加的时候判断集合中是否有hashcode值

没有直接把新的对象赋进对象里

相等在继续和集合中的对象equals对比

​ 如果equals为true:则表示同一个对象,则不保存

​ 如果equals为false:存储在之前对象相同的链表上(修改)

TreeSet比较问题

TreeSet比较应用类型必须实现Comparable接口

在比较方法中

this与o比较返回

1 this优先级比较高

-1 o优先级比较高

0 同一个对象

也可以创建一个类实现Comparator接口

让他们在接口的实现方法做判断

在创建TreeSet的时候给赋上去

HashSet查询的时候比较高效率,TreeSet做范围查询的时候比较高,开发中通常使用HashSet

Map接口

因为Map没有实现Collection接口也没有实现Iterable接口所以Map不能使用foreach操作,故Map并不是集合

创建Map接口的时候需要指定数据类型,K(key)代表的是键,V(value)代表的是键的值,Map是键值对,每一对键值对可以使用Entry表示

Map其实其实就是两个集合的结合key是set集合,value是list集合,set的一个值指向value的一个值,组成键值对

Map的常用方法

方法作用
public V put(K key,V value)保存一对键值对
public void putAll(Map<? extends K,? extends V> m)保存多对键值对
public V remove(Object key)删除一个键值对
public int size()获得键值对总数
public boolean isEmpty()查看map是否为空
public V get(Object key)获取一个键值对的值
public boolean containsKey(Object key)查看所有键中是否有此键
public boolean containsValue(Object value)查看所有值中是否有此值
public Set keySet()获取所有的键
public Collection values()获取所有的值
public Set<Map.Entry<K,V>> entrySet()把map映射成set集合,集合内容为所有的Entry对象

HashMap与TreeMap

HashMap基于哈希算法,Map中的key对象的hashCode决定了储存的位置,因为Map中的key是Set,所以HashMap不能保证先后顺序,也不能重复

TreeMap底层基于红黑树算法,Map中存储的key会默认使用自然排序(从小到大),和TreeSet一样可以自然排序也可以自定义排序

Map的迭代方法

//获取所有的key值
map.keySet();
//获取所有的value值
map.values();
//获取map中所有的键值对
Set<Entry<K,V> entrys= map.entrySet();

Arrays工具类

public static List asList(T…a);

讲对象数组转换成List集合,此处生成的数组是不能增加也不能减少的。

Collections工具类

此类封装了Set、List、Map操作的工具方法,比如拷贝、排序、搜索、比较大小等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值