java笔记-集合框架-集合基础


面向对象语言对事物的体现都是以对象的形式,为了方便对多个对象的操作,就是对对象进行存储,集合就是存储对象最常用的方式。

数组和集合类的不同:

两者都是容器,数组虽然也可以存储对象,但长度是固定的;集合长度是可变的,数组中可以存储基本数据类型,集合只能存储对象。

集合类的特点:

集合只用于存储对象,集合长度是可变的,集合可以存储不同类型的对象。

为什么会出现很多容器?每个容器对数据的存储方式都有不同,该存储方式称为数据结构。

Collection中的方法:

add方法的参数是Object,以便于接收任意类型的对象。

集合中存储的都是对象的引用(地址)

什么是迭代器?

就是集合中取出元素的方法。

java中集合类的关系图


集合中添加元素

/*
** Collection add()方法。
*/
import java.util.*;
class CollectionDemo{
	public static void main(String[] args){
		ArrayList al=new ArrayList();
		//向集合中添加元素。
		al.add("java 001");
		al.add("java 002");
		al.add("java 003");
		al.add("java 004");
		al.add("java 005");
		//it对象在使用完毕即销毁。
		for(Iterator it=al.iterator();it.hasNext();){
			sop(it.next());
		}
	}
	public static void sop(Object obj){
		System.out.println(obj);
	}
}
集合中数据操作

/*
** Collection 方法。
** List:容器中的元素是有序的,可以重复,元素有索引。
** Set:容器中元素是无序的,不可以重复。

** List特有的方法:凡是可以操作角标的方法都是该体系特有的方法。
** 增加:add(index,element);
		 addAll(index,collection);
** 删除:remove(index);
** 修改:set(index,element);
** 查找:get(index);
		 subList(from,to);
		 listIterator();
** 获取集合长度:size();
** List 集合特有的迭代器:ListIterator。其是Iterator的子接口。
** 在迭代时,不可以通过集合对象的方法操作集合中的元素。因为会发生并发异常,即:迭代方法和集合对象方法同时操作集合中的元素。
** 在迭代时,只能通过迭代的方法操作元素,但操作有限,需用ListIterator子接口方法操作元素。
** 该接口只能通过List的listIterator方法获取。
*/
import java.util.*;
class ListDemo{
	public static void main(String[] args){
		ArrayList al=new ArrayList();
		al.add("java 001");
		al.add("java 002");
		al.add("java 003");
		al.add("java 004");
		al.add("java 005");
		//it对象在使用完毕即销毁。
		for(Iterator it=al.iterator();it.hasNext();){
			sop(it.next());
		}
		sop("删除指定位置(角标3)的元素");
		al.remove(3);
		sop(al);
		sop("修改指定位置(角标1)的元素");
		al.set(1,"java 007");
		sop(al);
		sop("查找指定位置(角标1)的元素");
		sop(al.get(1));
		sop("获取集合中的所有元素");
		sop(al.subList(0,al.size()));
		sop("获取集合中的所有元素,方法二:");
		Iterator it=al.iterator();
		while(it.hasNext()){
			sop(it.next());
		}
		//获得指定对象(java 007)的位置:
		sop(al.indexOf("java 007"));
		//返回列表中最后一次出现指定元素(java 007)的位置。
		sop(al.lastIndexOf("java 007"));
		sop("通过ListIterator 子接口操作集合中的元素");
		ListIterator li=al.listIterator();
		while(li.hasNext()){
			Object obj =li.next();
			if(obj.equals("java 007")){
				li.remove();	//此处已经删除了,为什么还能打印出来。
								//此处删除的是集合元素的引用,在此之前已将该引用值赋给了obj,下方打印的是obj的值。
				li.add("java 009");
				//li.set("java 0010");
			}	
			sop(obj);
		}
		sop("删除jva 007的元素。增加java 009的元素");
		sop(al);
	}
	public static void sop(Object obj){
		System.out.println(obj);
	}
}
模拟队列的先进先出和堆栈的先进后出特性

// 模拟队列和堆栈的先进先出和先进后出的过程。
import java.util.*;
class DuiLie
{
	private LinkedList link;
	DuiLie(){
		link=new LinkedList();
	}
	public void myAdd(Object obj){
		link.addFirst(obj);
	}
	//输出最下层的元素。
	//removeLast(),删除并返回此列表中的第一个元素。
	//若使用getLast(),则只能得到列表中的最后一个元素。必须删除,后续的才能下降为最后一个元素
	public Object myGet(){
		return link.removeLast();
	}
	public boolean isNull(){
		return link.isEmpty();
	}
}
class DuiZhan
{
	private LinkedList dz;
	DuiZhan(){
		dz=new LinkedList();
	}
	public void myAdd(Object obj){
		//率先加入的垫底。
		dz.addFirst(obj);
	}
	public Object myGet(){
		//输出最上层的元素。
		//removeFirst(),删除并返回此列表中的第一个元素。
		//若使用getFirst(),则只能得到列表中的第一个元素。必须删除,后续的才能上升为第一个元素。
		return dz.removeFirst();
	}
	public boolean isNull(){
		return dz.isEmpty();
	}
}
class  LinkedListTest
{
	public static void main(String[] args) 
	{
		DuiLie dl=new DuiLie();
		DuiZhan dz=new DuiZhan();
		//增加队列元素。
		dl.myAdd("java 001");
		dl.myAdd("java 002");
		dl.myAdd("java 003");
		dl.myAdd("java 004");
		sop("队列的先进先出特性");
		while(!dl.isNull()){
			sop(dl.myGet());
		}
		//增加堆栈元素。
		dz.myAdd("DuiZhan 001");
		dz.myAdd("DuiZhan 002");
		dz.myAdd("DuiZhan 003");
		dz.myAdd("DuiZhan 004");
		sop("堆栈的先进后出特性");
		while(!dz.isNull()){
			sop(dz.myGet());
		}
	}
	public static void sop(Object obj){
		System.out.println(obj);
	}
}

HashSet类型

/*
 Set:元素是无序的(存入和取出的数序不一定一致),元素不可以重复。
	|---HashSet:底层数据结构是哈希表。
		HashSet是如何保证元素的唯一性?
		通过元素的两个方法:hashCode和equals来完成。
		如果元素的hashCode值相同,才会判断equals是否为true。
		如果元素的hashCode值不同,不会调用equals.

		注意,对于判断元素是否存在(contains),删除(remove)等,依赖的方法是hashCode和equals.
*/
import java.util.*;
class Person
{
	private String name;
	private int age;
	Person(String name,int age){
		this.name=name;
		this.age=age;
	}
	public String getName(){
		return this.name;
	}
	public int getAge(){
		return this.age;
	}
	//重写字符串的哈希值。构建姓名+年龄的哈希值。
	public int hashCode(){
		return name.hashCode()+age;
	}
	//重写equals方法。
	public boolean equals(Object obj){
		//首先判断是否为Person类型,如果不是,直接pass
		if(!(obj instanceof Person)){
			return false;
		}
		//强制类型转换。先转换为Person类型。
		Person p=(Person)obj;
		//姓名年龄均相同为同一个人。
		return this.name.equals(p.name)&&(this.age==p.age);
	}
}
class  HashSetDemo
{

	public static void main(String[] args) 
	{
		HashSet hs=new HashSet();
		hs.add(new Person("hash 001",1));
		hs.add(new Person("hash 002",2));
		hs.add(new Person("hash 003",3));
		hs.add(new Person("hash 004",4));
		hs.add(new Person("hash 005",5));
		hs.add(new Person("hash 004",4));
		//使用iterator方法构建迭代器。
		Iterator it=hs.iterator();
		while(it.hasNext()){
			Person p=(Person)it.next();
			sop(p.getName()+"..."+p.getAge());
		}

	}
	public static void sop(Object obj){
		System.out.println(obj);
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 尚硅谷Java基础笔记是一套系统而全面的Java基础学习资料。这份笔记Java语言的基本概念介绍开始,涵盖了Java的核心知识点,包括变量、数据类型、运算符、流程控制等。接着,笔记详细讲解了面向对象编程的特点和Java中的类、对象、封装、继承、多态等内容。 在这份笔记中,还深入讨论了Java中的常用类库,如String、ArrayList、HashMap等,以及它们的常见用法和实例操作。此外,笔记还介绍了常见的异常处理机制,包括try-catch语句、throw和throws关键字等,帮助学习者理解并掌握Java中的错误和异常处理。 除了基础知识的讲解,尚硅谷Java基础笔记还提供了大量的例子和练习题,帮助学习者巩固所学内容,并通过实践提高编程能力。这些例子和练习题涵盖了各个知识点和应用场景,从简单到复杂,逐渐深入,非常有助于学习者的理解和应用能力的提升。 总而言之,尚硅谷Java基础笔记是一份详细、系统、易懂的学习资料,适合初学者入门学习Java编程。无论是对于零基础的学习者还是对于有一定编程经验的人来说,这份笔记都是一份不可多得的宝藏,可以帮助他们夯实Java基础,掌握编程技巧,为进一步扩展知识奠定坚实的基础。 ### 回答2: 尚硅谷java基础笔记是一份完整而详细的教程,对于初学者来说是一个很好的学习资源。 这份笔记由尚硅谷团队精心编写而成,包含了Java基础的各个方面。首先从Java的历史和应用领域入手,引导读者对Java有一个整体的认识。然后逐步介绍Java的发展环境和使用工具,让读者能够了解如何配置和使用Java开发环境。 接下来,笔记逐个介绍了Java的基本语法、数据类型、运算符、流程控制语句等基础知识。这些内容以简洁明了的方式呈现,附有实例和练习题,让读者可以通过练习巩固所学内容。 除了基础语法,笔记还深入讲解了Java的面向对象编程思想和相关特性,包括类与对象、封装、继承、多态等。这部分内容对于理解Java的核心思想和编程范式非常重要,而且通过实例和案例的讲解,更加直观地展示了面向对象的优势和应用。 此外,笔记还包含了Java的常用类库的介绍,如集合框架、IO流、异常处理等,这些内容对于进行实际开发非常实用。 总之,尚硅谷java基础笔记内容全面、深入浅出,适合初学者学习和巩固基础知识。通过系统地学习这份笔记,读者可以建立起扎实的Java基础,为后续的学习和实践打下坚实的基础。同时,笔记中的案例和练习题也为读者提供了不少实践机会,帮助读者更好地理解和应用所学知识。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值