集合中的方法与迭代遍历器

集合中的方法

创建集合

Collection c1 = new ArrayList();

c1.add("a");

c1.add("b");

c1.add("cd");

c1.add("e");

Collection c2 = new ArrayList();

c2.add("a");

c2.add("b");

c2.add("c");

c2.add("d");

添加方法 add

c1.add(c2); // 把c2当做一个元素 添加到c1中
System.out.println(c1);
c1.addAll(c2); // 把c2中的每一个元素 添加到c1中
System.out.println(c1);

删除方法 removeAll

// 删除的是调用集合中两个集合相同的元素
boolean rel = c1.removeAll(c2); // 没有交集则返回false
System.out.println(c1);
retainAll
// 返回的是 两个集合的交集
// 返回值 看调用者是否发生变化 
// 发生变化 true  反之 false
boolean rel = c1.retainAll(c2);
System.out.println(c1);  // 打印的是交集
System.out.println(c2);
System.out.println(rel);

包含方法 containsAll

// 判断c1中是否包含c2的所有元素
boolean rel = c1.containsAll(c2);
System.out.println(rel);
System.out.println(c1);
System.out.println(c2);
迭代遍历器
Collection c = new ArrayList();
c.add("a"); 
c.add("b"); 
c.add("c"); 
c.add("d"); 
// 获取迭代器
Iterator iterator = c.iterator();
// 循环遍历
while (iterator.hasNext()) {
	// 注意: 循环中 只调用一次next方法
	Object next = iterator.next();
	//iterator.next(); // 两个next方法 隔一个调一次
	// 打印集合中的元素
	System.out.println(next);
}

迭代遍历器原理

Collection c = new ArrayList();
// 实际上 集合内部有个指针
// 调用next 实际上 把指针向下移动一位
// 调用几次 挪动几位
	    //  <--
c.add("a"); //
c.add("b"); //
c.add("c"); //
c.add("d"); //
// 从集合中 获取迭代器
Iterator iterator = c.iterator();
// 判断是否有下一个元素
boolean rel = iterator.hasNext();
System.out.println(rel);
// 如果有下一个元素
if (rel) {
	// 获取下一个元素
	Object next = iterator.next();
	System.out.println(next);
}
return c;
Vector集合

创建一个Vector集合

Vector vector = new Vector();

vector.addElement("a");

vector.addElement("b");

vector.add("c");

vector.add("d");

// 遍历这个集合
Enumeration elements = vector.elements();
while (elements.hasMoreElements()) {
	System.out.println(elements.nextElement());
}

vector中 elements方法 相当于迭代器的作用

List特有方法

add(int index,Object obj)  //插入

set(index,obj)  // 替换

get(int index)  // 获取

remove(int index) // 删除

创建一个List集合

List list = new ArrayList();

list.add("a");

list.add("b");

list.add("c");

list.add("d");

// 添加插入(不能超出集合的元素个数)
//list.add(4,"x");
		
// 设置(替换该位置的元素)
list.set(0, "w");
System.out.println(list);
// 获取下标处的元素
Object object = list.get(0);
System.out.println(object);
		
// 删除(返回的是删除的元素)
Object obj = list.remove(0);
System.out.println(obj);

注意: 删除时 传入角标,传入的值会自动被当做角标处理 没有进行自动装箱

遍历集合

// 利用get方法遍历集合
for (int i = 0; i < list.size(); i++) {
	Object o = list.get(i);
	System.out.println(o);
}
ArrayList 和 LinkedList

ArrayList

查询快 增删慢

数组实现 (一块连续的存储空间)

查询: 按角标 

增删时 把要删除或增加的元素后面的所有元素

向前移动或者向后移动

LinkedList

查询慢 增删快

链表实现 (存储空间不连续)

查询: 先看查找的元素离哪一端近 就从哪一端开始 

一个一个向后或向前寻找 直到找到

增加: 链表中的元素 要保证能找到自己的上一个和下一个元素

需要保存上一个和下一个元素的地址

只要保存了地址 就能找到元素 就相当于插入到了链中

后面的元素 不会发生改变

LinkedList linkedList = new LinkedList();
linkedList.addLast("a");
linkedList.addLast("b");
linkedList.addLast("c");
linkedList.addLast("d");
System.out.println(linkedList); // [a,b,c,d]
LinkedList linkedList = new LinkedList();
linkedList.addFirst("a");
linkedList.addFirst("b");
linkedList.addFirst("c");
linkedList.addFirst("d");
System.out.println(linkedList); // [d,c,b,a]

LinkedList模拟出栈 (先进后出)

LinkedList linkedList = new LinkedList();
linkedList.addFirst("a");
linkedList.addFirst("b");
linkedList.addFirst("c");
while (!linkedList.isEmpty()) {
	// 集合不是空的就继续删除第一个元素
	Object object = linkedList.removeFirst();
	System.out.println(object);
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值