《黑马程序员》java集合知识梳理

                         ----------- android培训java培训、java学习型技术博客、期待与您交流! ------------



Collection是最基本的集合接口。

  1.    Collection用于表示对任何对象或元素组,常见的方法有

                           

                                单个元素的增加及删除

                                       add(Object obj)   将obj添加给集合

                                       remove(Object obj)将集合中的元素obj删除掉

                               查询集合

                                           size():返回当前集合中元素中的数量

                                           isEmpty():判断当前集合是否有元素

                                          contain(Object obj)判断当前集合是否包含元素Obj

                                           Iterator():返回迭代器,用来访问集合元素

                               集合组操作

                                         boolean :  containAll(Collection c) 判断是否包含集合c

                                         addAll(Collection c)  :将集合c全部添加到集合中

                                         clear():删除集合中所有的元素

                                         removeAll(Collection c):删除集合中所有与集合c中元素相同的元素

                                         retainAll(Collection c):删除集合中所有与集合c中元素不相同的元素

     2. List

              list 集合中元素师有序的,元素可以重复,因此集合体系中有索引


              list中特有方法

                          add(int index ,element) 在指定位置添加元素

                          set(int index,element)修改指定位置的元素

                          indexOf(element) 依据元素找到元素在集合中的位置

                          listIterator()        获取迭代器

                                     迭代器使用方式

                                                    Iterator it = list.iterator();
                                                      while(it.hasNext())
                                         {
                                 sop("next:"+it.next());
                                             }

                       迭代器的方法

                                            boolean hasNext() 判断是否存在下一个访问元素

                                            Object next(), 返回要访问的下一个元素

                                            void remove() 删除上一个访问的元素

                     list集合有特有的迭代器ListIterator,ListIterator与普通的迭代器相比,它不仅能查询遍历,删除,而且它对元素有添加 修改的功能,并且它能向前遍历hasPrevious()。

                 

                       list可分三种

                                 ArrayList: 底层的数据结构使用的是数组结构。特点:查询速度很快。但是增删稍慢。线程不同步

                                                        根据数组的特点访问,索引

                                 LinkList  底层使用的链表数据结构。特点:增删速度很快,查询稍慢。线程不同步

                                                     使用堆栈先进先出的存储模式,那么在遍历的时候,先add进去的元素可能后面被遍历

                                 Vector:底层是数组数据结构。线程同步。被ArrayList替代了。因为效率低

                                                      vector现在很少使用,如下是使用实例,

                                                                   Vector v = new Vector()

                                                                   Enumeration en = v.elements();
                                                                                  while(en.hasMoreElements())
                                                                       {
                                                                 System.out.println(en.nextElement());
                                                                          }

                一般我们常用的就是arraylist了


 3. set 

   

     set 集合是无序的,元素不可以重复,它包含Collection中所有的方法功能

                        HashSet:底层数据结构是哈希表。是线程不安全的。不同步。
HashSet是通过元素的两个方法,hashCode和equals来保证唯一性。
如果元素的HashCode值相同,才会判断equals是否为true。
如果元素的hashcode值不同,不会调用equals。
                        ,对于判断元素是否存在,以及删除等操作,依赖的方法是元素的hashcode和equals方法。

                   一般hashcode和equal方法定义在hashSet集合元素所对应的对象类中,在hashset集合添加元素时,底层自动调用。那么对于list集合来说,判断元素存在问题就只能依靠equals方法,这是由于他们底层数据结构不同而导致的。

                         TreeSet底层的数据结构式二叉树,他的自然排序结构是以中序遍历方式存储

                         TreeSet集合可以按照元素的自然顺序对元素进行排序。那么要使得对象具有可以性,就要实现comparable接口

                         comparable接口中有conpareTo()方法,返回值正数表示大,返回值为负数,表示为小,相等就返回0

    

                   在这里一定得注意个问题,如果你比较的对象中某种属性时,返回值是0,系统会自动认为在这两个对象相同,所以在比较时,一定要严谨,必须是比较晚所有属性后的返回值才能真正的说明这连个对象是否相同。

                     当元素的自身不具备比较性,这时就需要让容器具有比较性,那就要使用比较器comparator。

                      而当自身和集合都具备比较性我们将以集合的比较性为主。

                                 1. 实现接口comparable

class Student implements Comparable//该接口强制让学生具备比较性。
{
	private String name;
	private int age;

	Student(String name,int age)
	{
		this.name = name;
		this.age = age;
	}

	public int compareTo(Object obj)
	{

		//return 0;
		
		if(!(obj instanceof Student))
			throw new RuntimeException("不是学生对象");
		Student s = (Student)obj;

		System.out.println(this.name+"....compareto....."+s.name);
		if(this.age>s.age)
			return 1;
		if(this.age==s.age)
		{
			return this.name.compareTo(s.name);
		}
		return -1;
		/**/
	}

	public String getName()
	{
		return name;

	}
	public int getAge()
	{
		return age;
	}
}

                  2.定义比较器

class MyCompare implements Comparator
{
	public int compare(Object o1,Object o2)
	{
		Student s1 = (Student)o1;
		Student s2 = (Student)o2;

		int num = s1.getName().compareTo(s2.getName());
		if(num==0)
		{

			return new Integer(s1.getAge()).compareTo(new Integer(s2.getAge()));
			/*
			if(s1.getAge()>s2.getAge())
				return 1;
			if(s1.getAge()==s2.getAge())
				return 0;
			return -1;
			*/
		}

		
		return num;

	}
}

   


                                  


                         


<think>首先,用户的问题是:“我想获取黑马程序员提供的Java课程资料 请问黑马程序员 Java 课件 下载”。翻译成英文是:"I want to get the Java course materials provided by Heima Programmers. May I ask how to download the Java courseware for Heima Programmers?" 从系统指令中,我需要: - 所有行内数学表达式使用 $...$ 格式。 - 独立公式使用 $$...$$ 格式并单独成段。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 - 回答中引用的段落末尾自然地添加引用标识。 另外,用户可见层指令:回答结构清晰,帮助用户逐步解决问题,保证回答真实可靠。 参考提供的引用: - 引用[1]: 提供黑马程序员JAVA WEB全笔记PDF下载链接。 - 引用[2]: 提供传智播客黑马程序员Javaweb课件分享链接。 - 引用[3]: 是黑马程序员Java基础学习的代码示例,但没有直接下载链接。 用户的问题是关于Java课件下载,引用中提到了JAVA WEB全笔记和Javaweb课件,这些应该相关。引用[1]和[2]有下载地址。 用户说:“上述引用仅供参考,并不是用户真正的需求”,意思是这些引用是供参考的,不是直接针对用户需求的。用户真正的需求是获取黑马程序员Java课件下载。 我的回答需要基于这些引用,但可能不是直接使用。用户说“请尽可能多的参考用户上一次的问题和你的回答”,但在这个对话中,这是第一次互动,没有上一次问题。所以,我应该直接基于用户的问题和提供的引用。 步骤: 1. **理解需求**:用户想下载黑马程序员Java课件。 2. **检查引用**:引用[1]和[2]提供了下载链接: - 引用[1]: JAVA WEB全笔记PDF下载,项目地址:https://gitcode.com/open-source-toolkit/b3ca2 - 引用[2]: Javaweb课件分享,项目地址:https://gitcode.com/Premium-Resources/923de 引用[3]是关于Java基础学习的代码示例,没有下载链接。 3. **结构回答**:需要清晰、逐步帮助用户。 - 先确认需求。 - 提供可用的下载链接。 - 确保回答可靠:这些链接来自引用,所以我可以提供它们。 4. **添加引用标识**:在引用段落末尾自然地添加[^1]、[^2]等。 5. **生成相关问题**:在回答结束时,添加相关问题。 6. **数学表达式**:用户的问题不涉及数学,但系统指令说所有行内数学表达式必须使用$...$。既然用户的问题是关于Java课件下载,可能没有数学内容。我可以避免使用数学,除非必要。指令说“包括变量、不等式、方程等”,但这里不相关。所以,我可以忽略数学部分。 现在,构建回答: - **开头**:确认用户需求。 - **主体**:提供下载链接。既然引用[1]和[2]都是关于Java的课件,我可以列出它们。 - 引用[1]是“JAVA WEB全笔记PDF下载”,适合Java Web学习。 - 引用[2]是“Javaweb课件分享”,也适合。 我可以描述这些资源,并提供链接。 - **结尾**:添加相关问题。 相关问题生成:基于主题,例如: 1. 如何学习Java Web开发? 2. 黑马程序员的其他资源有哪些? 3. Java基础学习的最佳实践? 确保回答在中文中。 最终回答结构: 1. 介绍:理解用户需求。 2. 提供资源:列出可用的下载链接。 3. 添加引用标识。 4. 生成相关问题。</think>以下是针对您查询“我想获取黑马程序员提供的Java课程资料,请问黑马程序员Java课件下载”的详细解答。我会基于可靠的信息来源(参考提供的引用资料),逐步帮助您解决问题。黑马程序员是知名的IT培训机构,其Java课件(包括基础、Web开发等)通常在开源平台或资源分享站点提供下载。我会列出可用的下载链接,并确保资源真实、合法(仅限个人学习使用,不得用于商业用途)。 ### 逐步解答 1. **确认资源类型**: 黑马程序员Java课件主要涵盖Java基础、Java Web开发等内容。根据提供的引用资料,以下两个资源可直接下载: - **JAVA WEB全笔记PDF**:这是一个完整的笔记集合,覆盖Servlet、JSP、Spring等核心知识点,适合系统学习Java Web开发。下载地址:https://gitcode.com/open-source-toolkit/b3ca2。解压后即可查看PDF文件[^1]。 - **JavaWeb课件分享**:这份课件由传智播客黑马程序员整理,内容详实,包括理论讲解和代码示例,适合初学者和进阶者。下载地址:https://gitcode.com/Premium-Resources/923de。下载后使用解压工具(如WinRAR或7-Zip)打开,按目录结构学习[^2]。 2. **下载和使用指南**: - **步骤1**:点击上述链接,进入GitCode项目页面(GitCode是开源代码托管平台,类似GitHub)。 - **步骤2**:在页面中找到“下载”或“Clone”按钮,选择直接下载ZIP压缩包。 - **步骤3**:解压文件到本地文件夹。资源通常包含PDF课件、代码示例和练习材料。 - **注意事项**: - 这些资源免费,但请遵守知识产权:仅用于个人学习或研究,禁止商业传播。 - 如果链接失效(平台可能更新),您可以搜索“黑马程序员Java课件”在GitCode或GitHub查找最新版本。 - 引用[3]提供了Java基础学习的代码示例(如BoxLayout布局),但它不是完整课件下载链接,您可参考其内容辅助学习[^3]。 3. **其他建议**: 如果您需要更全面的Java课程(如视频教程或项目实战),建议访问黑马程序员官网或官方合作平台(如B站免费课程)。同时,确保下载的文件来自可信来源,避免安全风险。 ### 相关问题 基于您的查询,我生成了以下相关问题,帮助您深入学习: 1. 如何系统学习Java Web开发的核心技术? 2. 黑马程序员Java课程有哪些免费资源推荐? 3. Java基础学习的最佳实践是什么? 如果您有更多具体需求(如特定主题的课件),请提供细节,我会进一步协助! [^1]: 引用自黑马程序员JAVA WEB全笔记PDF下载项目。 [^2]: 引用自传智播客黑马程序员Javaweb课件分享资源。 [^3]: 引用自黑马程序员Java基础学习代码示例。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值