Java集合与泛型学习笔记

1:Java集合类

首先我们思考为什么出现集合类?
理由:
1面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象操作,就对对象进行储存,集合就是储存对象最常用的一种方式
2 数组和集合同是容器,有何不同?
数组虽然也可以储存对象,当是长度固定的。集合长度是可变的 。数组可以储存基本数据类型,集合只可以储存对象引用(地址)(可以是不同类型的对象引用)

Java集合接口共同组成Java集合框架

Java集合框架中有许多容器(边框),为什么有这么多容器(边框)?
每一个边框(容器)对数据的储存方式都有不同 (这个储存方式叫数据结构
在这里插入图片描述
注:java集合框架中有许多的接口和类我们只要求掌握Collection接口, List接口, Set接口,ArrayList类,Linkedlist类,HashSet类,TreeSet类,HashMap类,TreeMap类,以上的类与接口下面会一一概述

Collection接口下的两个List接口Set接口。
List接口:元素是有序的,元素可以重复,应为有索引
Set接口:元素是无序的,不可以重复

1:List接口

1:ArrayList类

每个ArrayList实例都有一个容量容量是用于存储列表中的元素的数组(数据结构)的。 它总是至少与列表大小一样大。
当元素添加到ArrayList时,其容量(数组)会自动增长。 没有规定增长政策的细节,除了添加元素具有不变的摊销时间成本。

ArrayList是最常用的List接口的实现类,他使用数组作为其内部储存的结构。(线程不同步)

List接口,提供的是一个有序的集合,且List允许有重复的元素。(所有集合类都实现了Iterator)

我们在这引入一个概念:迭代器
什么是迭代器
可在容器(数组,链表)上访问的接口 (这是一个接口)

查询API文档可以找到这个方法在Collection接口及他的子类中都有出现,如下
Iterator iterator() 方法作用:
以正确的顺序返回该列表中的元素的迭代器。

Iterator接口中含有的方法:
1: boolean hasNext()
如果迭代具有更多元素,则返回 true 。
:2: E next()
返回迭代中的下一个元素。

注:
1:List集合接口特有的迭代器:ListIterator(Iterator接口的子接口)

2: 在迭代时,不可以通过集合对象的方法操作集合中的元素,会发生并发性异常。
所以只可以使用Iterator方法,但该方法有限,所以要使用ListIterator方法

如下代码我们将介绍ArrayList类中的常用方法应用,读者应自行查阅API动手实践

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.ListIterator;
public class ArrayListDemo1 {
   
  public static void main(String args[]) {
   
	  
	  /*ArrayList<String>的解释:使用泛型技术,表示这个ArrayList用来储存String对象
	   * 
	   * *创建一个集合容器(边框),使用Collection接口子类:ArrayList
	   * 
	   */
	  
	  
	   
	  ArrayList <String> a=new ArrayList<String>();   
	  Collection <String> c=new ArrayList<String>();   
	  a.add("one");      //Collection接口的方法:将对象添加给集合
	  a.add("two");
	  c.add("three");
	  c.add("four");
	  c.add("four");
	  a.addAll(c);       //Collection接口的方法:将c集合中所有元素添加给该集合
	  a.add(1,"zero");
	  a.remove(2);          //List接口的方法:删除指定位置上的元素
	  a.remove("three");    //Collection接口的方法:如果集合中有与“three”匹配的对象,就删除
	  System.out.println("是否含有该对象"+a.containsAll(c)); Collection接口的方法:查找集合中是否含有对象c中所有元素
	  System.out.println("是否含有该对象"+a.contains("three"));  //Collection接口的方法:查找集合中是否含有对象“three”
	  
	  System.out.println("Iterator迭代器的使用");  //
	  Iterator <String> ite=a.iterator(); 
	  while(ite.hasNext()) {
        // Ireator接口的方法:判断是否存在另一个可访问元素
		  
		  System.out.println(ite.next());  //Ireator接口的方法:返回要访问的下一个元素
		  
	  }
	  
	  System.out.println("ListIterator迭代器的使用");  //

	  ListIterator <String> ites=a.listIterator(); 
	  while(ites.hasNext()) {
        // Ireator接口的方法:判断是否存在另一个可访问元素
		  
		  String obj=ites.next();

		  if (obj.equals("one")) {
   
			  
			  ites.remove();
			ites.add("five");

		}
		  
		  System.out.println(obj);  //Ireator接口的方法:返回要访问的下一个元素
		  
	  }
	  
	  System.out.println("指定位置的元素"+a.get(0)); //List接口的方法:返回List中指定位置的元素
	  System.out.println("指定位置的元素"+a.get(2)); //List接口的方法:返回List中指定位置的元素
	  System.out.println("返回第一个出现元素指定位置的元素"+a.indexOf("four"));//List接口的方法:返回List中第一个出现“four”元素的指定位置的元素
	  System.out.println("返回最后一个出现元素指定位置的元素"+a.lastIndexOf("four"));//List接口的方法:返回List中最后一个出现“four”元素的指定位置的元素

	  
  }
}

运行结果
在这里插入图片描述
ArrayList类的问题:
将自定义对象作为元素存到ArrayList集合中,并去除重复元素
比如存人对象,同姓名,同年龄,为重复元素

思路:
1:对人描述,间数据封装进入对象
2:定义容器(边框),将人存入
3:取出

class Person {
   

	private String name;
	private String age;

	public Person(String name, String age) {
   

		this.age = age;
		this.name = name;

	}

	public String getName() {
   

		return name;

	}

	public String getAge() {
   

		return age;

	}

	public boolean equals(Object object) {
   //这个方法是底层自动调用,(不重写该方法,该方法的作用就是*判断是否有相同的对象*。所以结果原样输出,重写该方法后,作用变了)

		if (!(object instanceof Person)) {
   

			return false;

		}
		Person person = (Person) object;
//	  System.out.println(this.name + "..." + person.name);//该输出可以看底层的实现

		return this.name.equals(person.name) && this.age==person.age;
	}

}

public class ArrayListProblem {
   

	public static void print(Object object) {
   

		System.out.println(object);

	}

	public static ArrayList<Person> deleteSamePerson(ArrayList<Person> person) {
   

		ArrayList<Person> arrayList = new ArrayList<Person>();

		Iterator<Person> iterator = person.iterator();

		while (iterator.hasNext()) {
   

			Object object = iterator.next();
			Person person2 = (Person) object;
			 if(!(arrayList.contains(person2))) {
   // 调用了重写的equals()方法

				arrayList.add(person2);

			}

		}
		return arrayList;

	}

	public static void main(String[] args) {
   

		ArrayList<Person> a = new ArrayList<Person>();

		a.add(new Person("zlj", "12"));// Object object=new Person("zlj", "12")
		a.add(new Person("zlj", "12"));
		a.add(new Person("zlj", "12"));
		a.add(new Person("lqx", "24"))
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值