黑马程序员—基础之集合回顾



---------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------         

 对于学习中发掘的问题,借鉴了老师视频中的讲解和演示资料,进行了部分归纳总结。

有利于在后面的学习中进行回顾,抓住重点。

        希望自己和走过路过的朋友们都有些收获吧。

(1)集合的由来?
         因为面向对象的语言对事物的描述都是以对象体现,如果要对多个对象进行存储和遍历操作,
就需要用一个容器存储,而对象数组的弊端是长度固定,所以,为了符合要求,java就提供了
集合类供我们使用。

(2)集合和数组的区别?
        A:集合
                长度可以改变(这里的长度可变,是种动态的扩充,更为灵活)
                只能存储对象类型
                可以存储不同类型的对象
        B:数组
                长度固定(数组虽然没有集合这么广泛的应用,但是由其优势,在查询和简单数据操作上,效率较高)
                可以存储对象类型,也可以存储基本类型
                但是只能存储同一种类型的对象

(3)集合继承体系的由来?
                由于数据结构不同,就会有多种集合的存在,而这多种集合本身有共性的内容,
                通过不断的向上抽取,最终就形成了集合的继承体系结构。

          Collection
			|--List
				|--ArrayList 数组列表
				|--Vector  矢量
				|--LinkedList 连串列表
			|--Se
				|--HashSet 无序
				|--TreeSet 有序 

针对一种继承体系,是如何学习和使用的呢?
                学习:顶层,因为顶层定义的是共性内容。
                使用:底层,因为底层才是具体的实现,而且具有在继承的基础上建立的独有方法。


(4)Collection接口的功能:
                        A:添加功能// 补充,部分collection中,一些元素是被限制不能添加的。
                                add(Object obj)
                        B:删除功能  可以对collection上的一个对象进行操作,但是不能分拆。
                                remove(Object obj)
                       C:判断功能  使用这个方法,可以对判断是否已经存在这个值。
                                contains(Object obj)
                        D:迭代器功能
                                Iterator iterator()
                        E:长度功能

                                size()

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class StudentTest {
	public static void main(String []args){
		//第一步,建立集合对象,需要导入两个
		Collection c = new ArrayList();
		//创建对象
		Student s1=new Student("黄药师",60);
		Student s2=new Student("欧阳峰",60);
		Student s3=new Student("段那啥",61);
		Student s4=new Student("洪七公",70);
		//添加到集合——————————————————————————————添加
		c.add(s1);
		c.add(s2);
		c.add(s3);
		c.add(s4);
		//添加完数据,该进行遍历输出,迭代方法 也需要导入包。这里的c作为父类,可以引用子类的方法
//		Iterator it = c.iterator();—————————————————————————————————
//		while (it.hasNext()) {————————————————————————————这里是迭代的使用
//			System.out.println(it.next());————————————————————————————			
//		}		
		//System.out.println("c:"+c.remove(s1));_______________________________删除。
//		System.out.println("c:"+c.contains(s1));_______________________________比较
//		System.out.println("c:"+c.size());	_______________________________集合的长度方法。
	}
}

(5)迭代器:
迭代器就是遍历集合元素的一种方式,它依赖集合而存在。
                Iterator
                        |--hasNext()
                        |--next()
List
                (1)List的特点:
                        Collection
                                |--List
                                元素有序(存储顺序和取出顺序一致),元素可以重复
                                |--Set
                                元素无序,唯一
(2)List的特有功能:
                A:添加 
                        add(int index,Object obj)
                B:删除
                        remove(int index)
                C:获取
                        Object get(int index)
                D:列表迭代器
                        ListIterator listIterator()
                E:修改
                        set(int index,Object obj)

(3)List的案例:( 这个时候的遍历方式有两种 迭代器,普通for循环)  

List存储字符串并遍历:
	List list = new ArrayList();


			list.add("hello");
			list.add("world");
			list.add("java");


			//迭代器
			Iterator it = list.iterator();
			while(it.hasNext())
			{
				String s = (String) it.next();
				System.out.println(s);
			}


			//普通for循环
			for(int x=0; x<list.size(); x++)
			{
				String s = (String)list.get(x);
				System.out.println(s);
			}

List存储自定义对象并遍历:
public class ListTest {
	public static void main(String[] args) {
		//1,创建集合对象,2,建立对象,3,添加元素,4,遍历;
		List list = new ArrayList();
		Student s1 = new Student("小兔子乖乖",3);
		Student s2 = new Student("狼外婆坏坏",9);
		list.add(s1);
		list.add(s2);
		Iterator it = list.iterator();
		while(it.hasNext()){
			Student s = (Student)it.next();
			System.out.println(s);
		}
		
	}
}

(4)ListIterator的特殊用法:
                A:可以逆向遍历,但是需要先正向遍历,一般不用。

                B:并发修改异常
                        原因:在迭代器遍历的时候,不要使用集合修改集合本身。
                        解决方案:
                                A:使用迭代器遍历的时候,通过迭代器修改集合。
                                B:使用集合遍历,通过集合修改集合。

List集合的子类:

(1)List的子类特点:
        List
                |--ArrayList
                        底层数据结构是数组,查询快,增删慢。
                        线程不安全,效率高。
                |--Vector
                        底层数据结构是数组,查询快,增删慢。
                        线程安全,效率低。
                |--LinkedList
                        底层数据结构是链表,查询慢,增删快。
                        线程不安全,效率高。
(2)到底使用谁?
        根据需求看。
                要安全吗:
                        要:Vector
                        不要:ArrayList,LinkedList
                                                        查询多:ArrayList
                                                        增删多:LinkedList
                                                                        什么都不知道用ArrayList。
(3)ArrayList
案例:
A:存储字符串并遍历:
ArrayList<String> array = new ArrayList<String>();


				array.add("hello");
				array.add("world");
				array.add("java);


				//方式1
				Iterator<String> it = array.iterator();
				while(it.hasNext())
				{
					String s = it.next();
					System.out.println(s);
				}


				//方式2
				for(int x=0; x<array.size(); x++)
				{
					String s = array.get(x);
					System.out.println(s);
				}


				//方式3
				for(String s : array)
				{
					System.out.println(s);
				}
(4)Vector
                有特有功能,但是写法复杂,所以不使用。
(5)LinkedList
                存储字符串并遍历:
public static void main(String[] args) {
		// 创建集合对象
		LinkedList<String> list = new LinkedList<>();
		// 添加对象。
		list.add("牛大胆 ");
		list.add("大胆牛");
		Iterator<String> it = list.iterator();
		while (it.hasNext()) {
			String s = it.next();
			System.out.println(s);


		}
	}
Set
	(1)HashSet存储元素和保证元素的唯一性
		A:HashSet的底层数据结构是哈希表,保证元素的唯一性.
		B:如何保证的呢?
			它底层依赖两个方法:hashCode()和equals()。
			顺序:
				首先判断hashCode()是否相同:
					是:继续equals()方法
						返回false:说明集合中没有这个元素,添加
						返回true:说明集合中有这个元素,不添加
					否:直接添加到集合。
	(2)HashSet存储字符串和自定义对象(同一个对象是根据需求)并遍历(掌握)
		A:字符串

		B:自定义对象(姓名和年龄都相同极为同一个人)

			public class Student
			{
				private String name;
				private int age;

				//构造方法和get/set方法省略...

				//自己在写一遍,以后就自动生成。
				public int hashCode()
				{
					return this.name.hashCode()+this.age*13;
				}

				public boolean equals(Object obj)
				{
					if(this==obj)
					{
						return true;
					}

					if(!(obj instanceof Student))
					{
						return false;
					}

					Student s = (Student)obj;
					return this.name.equals(s.name) && this.age == s.age;
				}
			}
	(3)TreeSet存储字符串和自定义对象保证元素唯一性和排序
		TreeSet的底层数据结构是二叉树。
		是怎么保证的呢?
			根据返回值是否是0来判断元素是否重复。
			根据返回值是正数还是负数来判断元素该如何存储。
		有几种方案:
			元素具备比较性:
				就是实现自然排序接口Comparable
			集合具备比较性:
				就是实现比较器接口Comparator
	(4)TreeSet存储字符串和自定义对象(同姓名同年龄即为同一个人,按照年龄排序)并遍历(理解)
	(5)LinkedHashSet:
		请问这个集合是什么意思?
		元素有序,唯一。
		由链表保证元素有序,由哈希表保证元素唯一。

2:集合常见的数据结构:
	(1)ArrayXxx 底层数据结构是数组,查询快,增删慢
	(2)LinkedXxx 底层数据结构是链表,查询慢,增删快
	(3)HashXxx 底层数据结构是哈希表,保证元素唯一依赖两个方法:hashCode()和equals()
	(4)TreeXxx 底层数据结构是二叉树,保证元素唯一和排序:自然排序,比较器排序。

3:Arrays
	 (1)是操作数组的工具类 
	(2)使用功能
		A:转字符串功能 public static String toString(int[] a)
		B :排序		public static void sort(int [] a)  
		C: 查找		public static int binarySearch(int [] a )
	方法都是静态的。
	
	(2)
		Arrays里面有一个把数组转成集合的方法	public static <T> List<T> asList(T... a)
			注意:如果把一个数组的元素转出成了一个集合,不能对集合进行增删操作,但可以进行写该操作


---------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------详细请查看: http://edu.csdn.net

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值