Java_Day_16_总结

List 有序可重复
ArrayList:查询快底层是数组
LinkedList:添加删除快,底层是双向链表
Set无序不可重复
HashSet:底层是散列表
TreeSet:底层是红黑树,元素必须有序
Map无序,key不能重复,value能重复保存映射关系
HashMap:底层是散列表
TreeMap:底层是红黑树,元素必须有序
 

集合:他是个接口,集合中,只能保存统一数据类型,那就是Object,
所以集合中是不能保存基本数据类型的
既然能保存Object,也就意味能保存任意类型元素,因为所有引用类型都可以对0bject发生多态
Collection是集合,两个直接子接口是List和set
List特性:有序可重复,保证数据的添加顺序和取出顺序一致
Set特性:无序不可重复,不能保证数据的添加和取出顺序一致
List有三个子类:
Arraylist:底层是数组,查询和更改效率极高
L inkedList:底层是双向链表,添加和删除效率要高一些
Vector:底层也是数组,是线程安全,已废弃,不推荐使用,己被ArrayLlist代替
Sset有两个子类
HashSet:底层是散列表
TreeSet:底层是二叉树
 

Collection方法:

public static void main(String[] args) {
		Collection collection = new ArrayList();
		// 集合判空
		System.out.println(collection.isEmpty());
		// 长度
		System.out.println(collection.size());
		// 自动装箱转为对应的包装类型,再发生多态转化为Object类型
		collection.add(1);
		collection.add("隔壁老王");
		// 删除指定元素
		collection.remove("隔壁老王");
		// 转数组
		Object[] arrObjects = collection.toArray();
		for (int i = 0; i < arrObjects.length; i++) {
			System.out.println(arrObjects[i]);
		}
		// 清空数组
		collection.clear();
	}

contains (Object o) :判断是否包含某个元素
remove (0bject。) :删除指定元素
这两个方法,底层都会去调用equals方法进行比较
代码覆写:

@Override
	public boolean equals(Object obj) {
		if (this == obj) {
			return true;
		}
		if (obj instanceof Manager) {
			Manager m1 = (Manager) obj;
			if (m1.no == this.no && this.name.equals(m1.name)) {
				return true;
			}
		}
		return false;
	}

增强for循环
foreach是迭代器的简写方式,所以功能有限,只能查询,不能删除,
想要在遍历中删除,需要使用迭代器的remove
 

public static void main(String[] args) {
		int[] strings = { 2, 8, 4, 6, 4, 6, 9 };
		// 将数组中元素赋值给string
		for (int i : strings) {
			System.out.println(i);
		}
	}

Iterator:
一种模式,使遍历和被遍历的对象相互分离,不用关心数据结构如何存储,拿到迭代器对象
collection中提供了一一个iterator()方法用于获取迭代器对象集合. iterator ();
迭代器中,有三个方法
1 boolean hasNext() :判断游标下 是否还有元素默认 指向顶端,并没有指向第一个元素
2 E next() :将迭代器游标向下移动- -位,并取出该元素
3remove():删除当前执行的元素会把集合中的也删除
一旦创建,集合不能改长度
 

public static void main(String[] args) {
		// 新对象
		Collection collection = new ArrayList();
		collection.add(1);
		collection.add(5);
		collection.add(5);
		collection.add(15);
		collection.add(17);
		Iterator it = collection.iterator();
		// 迭代器用法
		while (it.hasNext()) {
			Object o = it.next();
			System.out.println(o);
		}
		// 迭代器使用完之后,想要再次使用,需要重新生成,因为光标已经指向最后一个了
		it = collection.iterator();
		while (it.hasNext()) {
			Object o = it.next();
			System.out.println(o);
		}
	}

List特性:有序可重|复,保证数据的添加顺序和取出顺序一致
Arrayllist:底层是数组,查询和更改效率极高默认10, 扩大为原来1.5倍,非线程安全
创建对象的时候,没有容量,就是0 ,当第一次添加数据的时候,才会初始化容量
LinkedList:底 层是双向链表,添加和删除效率要高一些
Vector:底层也是数组,是线程安全,已废弃,不推荐使用,已被ArrayLlist代替默认10, 扩大为原来2倍
 

List常用方法:

public static void fang(List list) {
		// 集合中引用数据类型
		// 尾部添加
		list.add(1);
		list.add("akdchb");
		// 在指定位置添加,移动元素效率低
		list.add(2, 86);
		// set(int index,E e); 更改指定元素
		list.set(2, 8);
		// get(int index);获取指定位置值
		list.get(1);
		// remove();有重载,传入int值删除索引对应的值,传入引用类型删除值
		list.remove(1);
		// 升序排序
		Collections.sort(list);
		System.out.println(list);
	}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值