JavaSE入门——集合Collection

Collection

在集合的继承体系中,collection可以说是最大的,它下面有list和set(子孙类),因此,collection中定义的方法规定是list和set都有的。

集合中只能存储单个元素,且只能保存引用数据类型的数据,保存Object ,又因为多态,相当于什么都可以保存。

collection针对所有集合有的方法
			boolean  add()   添加元素
			void        clear()   清空集合
			boolean   remove()  删除mo一个元素
			boolean   isEmpty()  判断集合是否为空
			boolean   contains()  是否包含mo个元素
			int            size()      元素个数
			object[]     toArray()  把集合转换为数组

代码奉上:


		//创建集合
		Collection c=new ArrayList();
		//自动装箱为Integer类型,然后向上转型  为Object类型,发生多态
		c.add(1);
		c.add(1);
		c.add(1.3);
		c.add(true);
		c.add(new Collection_01());
		c.add(new Object());
		System.out.println(c.size());
		System.out.println(c.isEmpty());
		
		c.remove(1.3);
		System.out.println(c.size());
		
		//直接遍历集合
		for(Object object:c) {
			System.out.println(object);
		}
		//把集合转换为Object数组,再遍历
		Object[] arr=c.toArray();
		for(Object object:arr) {
			System.out.println(object);
		}
		c.clear();
		System.out.println(c.size());
	
注意

在这些方法中判断包含(contains)和删除(remove)都是需要调用equals方法,因为要计较的是值,而保存的是引用数据类型,如果不用equals而用=,那么最终比较的是地址。不符合自己的需求。
而在八种基本数据类型的包装类中都覆写了equals,不需要我们覆写,但是,存入的不是八种基本数据类型的包装类,记得要覆写equals方法。

list

list特性:有序,可重复,存入顺序和取出顺序一致,可以有多个重复值。

list下有ArrayList和LinkedList

ArrayList

底层是数组,所以随机查询相对较快,随机增删相对较慢,是非线程安全。

LinkedList

底层是双向链表,所以随机增删相对较快,随机增删相对较慢。

链表

链表中保存节点

节点中有三个元素, 自身对象(添加到元素),下一个节点地址, 上一个节点地址

LiskedList 就是基于双向链表实现的

链表是没有下标的,所以查询慢,当然我们可以通过get方法使用下标去找到数据。但在get方法中也是通过循环,从首节点或者尾节点 或正向或逆行 一步步找到的
不像ArrayList 底层是数组,有下标

链表首尾添加元素示例

		// 尾部添加 成功返回true
		li.add(1);
		// 头部添加
		li.push(3);

		// 头部添加
		li.addFirst(3);
		// 头部添加 成功返回true
		li.offerFirst(3);
		// 尾部添加
		li.addLast(5);
		// 尾部添加 成功返回true
		li.offer(9);
		// 尾部添加 成功返回true
		li.offerLast(7);
//		上述添加方法本质就是调用linkLast和linkFirst两个方法,没有什么区别
		// [3, 3, 3, 1, 5, 9, 7]
		System.out.println(li);
		// 获取指定下标对应的元素
		System.out.println(li.get(3));
		// 获取首位元素
		System.out.println(li.getFirst());
		// 获取最后一个元素
		System.out.println(li.getLast());
		// 获取首位元素,并删除该元素,如果没有首位元素 报错java.util.NoSuchElementException
		System.out.println(li.pop());

set

set特性:无序 不可重复,添加顺序和取出顺序不一定一致
set下有SortedSet,而TreeSet是SortedSet的唯一实现类,保存的元素按照一定规则自动排序
数字:从小到大
日期:自然天数
字符串:每一位的ASCLL值
注意:TreeSet中元素类型必须统一,因为要排序。

set下还有HashSet,HashSet 就是HashMap的一个封装,这个写到Map时会介绍,是散列表,依靠hash算法在查询方面很有优势,但是本身不能直接排序。

所以我们在不要求排序,查询功能有要求时选择HashSet;在要求排序时最好选用TreeSet

集合遍历

代码奉上:

//直接遍历集合
		for(Object object:c) {
			System.out.println(object);
		}
		//把集合转换为Object数组,再遍历
		Object[] arr=c.toArray();
		for(Object object:arr) {
			System.out.println(object);
		}

当然我们也可以通过迭代器遍历。

猜你喜欢

转载自blog.csdn.net/lfz9696/article/details/107792507