首页 > 编程语言 >Java集合相关知识

Java集合相关知识

时间:2023-08-19 16:32:27浏览次数:32  
标签:Java java 知识 System println 集合 new public out

1、Collection的使用
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

public class Main
{
    public static void main(String[] args)
    {
        //创建集合
        Collection collection=new ArrayList();
        //添加元素
        collection.add("苹果");
        collection.add("香蕉");
        collection.add("西瓜");
        //输出元素
        System.out.println("元素个数:"+collection.size());
        System.out.println(collection);
        //删除元素
        //collection.remove("香蕉");
        //System.out.println(collection);
        //清空
        //collection.clear();
        //遍历集合
        //方式1for循环
        for(Object object:collection)
        {
            System.out.println(object);
        }
        //方式2 迭代器
        Iterator it=collection.iterator();
        while(it.hasNext())//判断是否还有元素
        {
            String s=(String)it.next();//next方法获取元素
            System.out.println(s);
            it.remove();//删除最后一个元素
        }
        System.out.println(collection);
        //判断
        //判断是否包含元素
        System.out.println(collection.contains("西瓜"));
        //判断集合是否为空
        System.out.println(collection.isEmpty());
    }
}
2、List的使用

List子接口特点:

  • 元素有下标;
  • 元素可以重复;
  • 元素有序;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
public class Main
{
    public static void main(String[] args)
    {
        List list=new ArrayList();
        //添加元素
        list.add("小米");
        list.add("苹果");
        //在指定下标添加
        list.add(0,"华为");
        System.out.println(list.toString());
        //删除元素
        //list.remove(1);
        //list.remove("苹果");
        //System.out.println(list.toString());

        //遍历
        //普通for
        for(int i=0;i<list.size();i++)
        {
            System.out.println(list.get(i));
        }
        //增强for
        for(Object object:list)
        {
            System.out.println(object);
        }
        //迭代器
        Iterator it=list.iterator();
        while(it.hasNext())
        {
            System.out.println(it.next());
        }
        //列表迭代器
        ListIterator lit=list.listIterator();
        //从前往后遍历,nextIndex返回索引
        while(lit.hasNext())
        {
            System.out.println(lit.nextIndex()+":"+lit.next());
        }
        //从后往前遍历
        while(lit.hasPrevious())
        {
            System.out.println(lit.previousIndex()+":"+lit.previous());
        }
        //判断是否包含某个元素
        System.out.println(list.contains("小米"));
        //获取元素索引值
        System.out.println(list.indexOf("华为"));

        //subList获取子集合,左闭右开
        List list1=list.subList(0,2);
        System.out.println(list1.toString());
    }
}
3、ArrayList

ArrayList特点:

  • 是使用数组实现的;
  • 元素有下标、可以重复、有序;
  • 查询、遍历快;
  • 增加、删除慢;
import com.edu.java.Employee;

import java.util.ArrayList;
import java.util.ListIterator;

public class Main
{
    public static void main(String[] args)
    {
        ArrayList arrayList=new ArrayList();
        Employee e1=new Employee("张三",2000);
        Employee e2=new Employee("李四",2000);
        Employee e3=new Employee("王五",2000);
        //1、添加元素
        arrayList.add(e1);
        arrayList.add(e2);
        arrayList.add(e3);
        arrayList.add(e3);
        //System.out.println(arrayList.toString());
        //2、删除元素
        //arrayList.remove(e3);
        //arrayList.remove(new Employee("王五",2000));//这样是删除不了的,相当于创建了一个新对象,除非在Employee中重写了equals方法
//        System.out.println(arrayList.toString());
//        3、遍历输出
//        3、1列表迭代器
        ListIterator lit= arrayList.listIterator();
        //从前往后遍历
        while(lit.hasNext())
        {
            System.out.println(lit.nextIndex()+":"+lit.next());
        }
        //从后往前遍历
        while(lit.hasPrevious())
        {
            System.out.println(lit.previousIndex()+":"+lit.previous());
        }

    }
}
4、LinkedList双向链表

链表结构实现,增删快,查询慢

import com.edu.java.Employee;


import java.util.Iterator;
import java.util.LinkedList;
import java.util.ListIterator;


public class Main
{
    public static void main(String[] args)
    {
        LinkedList linkedList=new LinkedList();

        //添加元素
        linkedList.add(new Employee("小明",2000));
        linkedList.add(new Employee("小刚",1000));
        linkedList.add(new Employee("小红",3000));
        System.out.println(linkedList.toString());
        //删除元素
//        linkedList.remove(new Employee("小刚",1000));
//        System.out.println(linkedList.size());
        //遍历
        /*
        for(int i=0;i< linkedList.size();i++)
        {
            System.out.println(linkedList.get(i));
        }
        for(Object obj:linkedList)
        {
            Employee e=(Employee) obj;
            System.out.println(e.toString());
        }
        Iterator it=linkedList.iterator();
        while(it.hasNext())
        {
            Employee e=(Employee)it.next();
            System.out.println(e.toString());
        }

         */
        ListIterator listiterator=linkedList.listIterator();
        while(listiterator.hasNext())
        {
            Employee e=(Employee) listiterator.next();
            System.out.println(e);
        }
        //判断
        System.out.println(linkedList.contains(new Employee("小明",2000)));
        System.out.println(linkedList.indexOf(new Employee("小红",3000)));
    }
}
5、Set

特点:无序、无下标,元素不能重复

package com.java.main;

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

public class TestSet
{
	public static void main(String[] args)
	{
		Set<String> set = new HashSet<>();
		
		// 添加元素
		set.add("张三");
		set.add("李四");
		set.add("王五");
		
		//输出所有元素
		System.out.println(set.toString());
		
		//删除元素,只能通过值删除
		//set.remove("张三");
		//System.out.println(set.toString());
		
		// 遍历
		// 增强for循环
		for(String s : set)
		{
			System.out.println(s);
		}
		// 迭代器
		Iterator<String> iterator = set.iterator();
		while(iterator.hasNext())
		{
			System.out.println(iterator.next());
		}
		// 判断是否包含某元素
		System.out.println(set.contains("李四"));
	}
}
6、HashSet
package com.java.main;

import java.util.HashSet;
import java.util.Iterator;

public class TestSet
{
	public static void main(String[] args)
	{
		HashSet<Student> hashSet = new HashSet<>();
		Student s1 = new Student("张三", 23);
		Student s2 = new Student("李四", 21);
		Student s3 = new Student("王五", 24);
		// 1、添加元素
		hashSet.add(s1);
		hashSet.add(s2);
		hashSet.add(s3);
		// 2、遍历输出
		Iterator<Student> iter = hashSet.iterator();
		while(iter.hasNext())
		{
			System.out.println(iter.next());
		}
		
		// 尝试添加姓名和年龄相同的对象
		// 当直接再添加同一个对象时,HashSet不允许
		hashSet.add(s3);
		System.out.println(hashSet);
		//当添加另一个对象时,如果没有重写hashCode方法和equals方法,则能够添加相同属性的对象
		// 如 hashSet.add(new Student("李四", 21));
		// 但是如果重写了hashCode方法和equals方法,则不能再次添加
		hashSet.add(new Student("李四", 21));
		System.out.println(hashSet);
		// 此时删除也可以另new一个对象
		hashSet.remove(new Student("张三", 23));
		System.out.println(hashSet);
	}
}

class Student
{
	private String name;
	private int age;
	
	public Student(String aName, int aAge)
	{
		name = aName;
		age = aAge;
	}
	
	public String getName()
	{
		return name;
	}
	public int getAge()
	{
		return age;
	}

	// 重写hashCode方法
	@Override
	public int hashCode()
	{
		int n1 = this.name.hashCode(); // String中已有hashCode方法
		int n2 = this.age;
		
		return n1+n2;
	}
	// 重写equals方法
	@Override
	public boolean equals(Object obj)
	{
		if(this == obj) // 是同一个对象
			return true;
		if(obj == null) 
			return false;
		if(obj instanceof Student)  // 属于同一个类但不是同一个对象,判断二者的属性是否相同
		{
			Student student = (Student)obj;
			if(this.name.equals(student.getName()) && this.age == student.getAge())
			{
				return true;
			}
		}
		
		return false;
	}
	@Override
	public String toString()
	{
		return "Student [name=" + name + ", age=" + age + "]";
	}
	
	
}
7、TreeSet
  • 基于排列顺序实现元素不重复;
  • 实现了SortedSet接口,对集合元素自动排序
  • 元素对象的类型必须实现Comparable接口,指定排序规则
package com.java.main;

import java.util.Iterator;
import java.util.TreeSet;

public class TestTreeSet
{
	public static void main(String args[])
	{
		TreeSet<Studentt> treeSet = new TreeSet<>();
		Studentt s1 = new Studentt("张三", 23);
		Studentt s2 = new Studentt("李四", 21);
		Studentt s3 = new Studentt("王五", 24);
		
		// 添加元素
		treeSet.add(s1);
		treeSet.add(s2);
		treeSet.add(s3);
		// 输出
		System.out.println(treeSet);
		// 遍历
		Iterator<Studentt> iterator = treeSet.iterator();
		while(iterator.hasNext())
		{
			System.out.println(iterator.next());
		}
		// 删除
		treeSet.remove(new Studentt("王五", 24));
		System.out.println(treeSet);
	}
}

class Studentt implements Comparable<Studentt>
{
	private String name;
	private int age;
	
	public Studentt(String aName, int aAge)
	{
		name = aName;
		age = aAge;
	}
	
	public String getName()
	{
		return name;
	}
	public int getAge()
	{
		return age;
	}
	// 先按姓名比,再按年龄比较,函数返回0说明两个对象相等
	@Override
	public int compareTo(Studentt o)
	{
		int n1 = this.name.compareTo(o.getName());
		int n2 = this.age - o.getAge();
		return n1 == 0 ? n2 : n1;  // n1==0说明姓名相同
	}
	
	@Override
	public String toString()
	{
		return "Studentt [name=" + name + ", age=" + age + "]";
	}
}

也可以用匿名内部类的方式重写compareTo方法

package com.java.main;

import java.util.Comparator;
import java.util.Iterator;
import java.util.TreeSet;

public class TestTreeSet
{
	public static void main(String args[])
	{
		TreeSet<Studentt> treeSet = new TreeSet<>(new Comparator<Studentt>() // 匿名内部类的方式重写compareTo方法
		{
			@Override
			public int compare(Studentt o1, Studentt o2)
			{
				int n1 = o1.getName().compareTo(o2.getName());
				int n2 = o1.getAge() - o2.getAge();
				
				return n1 == 0 ? n2 : n1;
			}
		});
		Studentt s1 = new Studentt("张三", 23);
		Studentt s2 = new Studentt("李四", 21);
		Studentt s3 = new Studentt("王五", 24);
		
		// 添加元素
		treeSet.add(s1);
		treeSet.add(s2);
		treeSet.add(s3);
		// 输出
		System.out.println(treeSet);
		// 遍历
		Iterator<Studentt> iterator = treeSet.iterator();
		while(iterator.hasNext())
		{
			System.out.println(iterator.next());
		}
		// 删除
		treeSet.remove(new Studentt("王五", 24));
		System.out.println(treeSet);
	}
}

class Studentt 
{
	private String name;
	private int age;
	
	public Studentt(String aName, int aAge)
	{
		name = aName;
		age = aAge;
	}
	
	public String getName()
	{
		return name;
	}
	public int getAge()
	{
		return age;
	}
	@Override
	public String toString()
	{
		return "Studentt [name=" + name + ", age=" + age + "]";
	}
	
	
}
8、Map
  • 用于存储任意键值对;
  • 键:无序、无下标、不允许重复;
  • 值:无序、无下标、允许重复。
package com.java.main;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

public class TestMap
{
	public static void main(String[] args)
	{
		Map<String, String> map = new HashMap<>();
		
		// 添加元素用put,如果键重复,就会覆盖原来的
		map.put("cn", "中国");
		map.put("uk", "英国");
		map.put("usa", "美国");
		
		// 输出
		System.out.println(map.toString());
		// 按键删除元素
		//map.remove("usa");
		//System.out.println(map.toString());
		
		// 遍历
		//1、 使用keySet得到所有键的集合,在使用map.get(key)方法得到对应的值
		Set<String> keyset = map.keySet();
		for(String key : keyset)
		{
			System.out.println(key + "---" + map.get(key));
		}
		// 2、使用entrySet得到键、值的映射
		Set<Map.Entry<String, String>> entries = map.entrySet();
		for(Map.Entry<String, String> entry : entries)
		{
			System.out.println(entry.getKey() + "-----" + entry.getValue());
		}
	}
}
9、TreeMap
package com.java.main;

import java.util.Comparator;
import java.util.Map;
import java.util.TreeMap;

public class TestTreeMap
{
	public static void main(String[] args)
	{
		TreeMap<Teacher, String> treeMap = new TreeMap<>(new Comparator<Teacher>()
		{
			public int compare(Teacher o1, Teacher o2) 
			{
				int n1 = o1.getNo() - o2.getNo();
				return n1;
			}
		});
		
		Teacher t1 = new Teacher("李四", 123);
		Teacher t2 = new Teacher("王五", 456);
		Teacher t3 = new Teacher("赵六", 789);
		
		// 添加元素
		treeMap.put(t1, "上海");
		treeMap.put(t2, "北京");
		treeMap.put(t3, "重庆");
		 
		// 输出
		System.out.println(treeMap.toString());
		
		// 遍历
		for(Teacher teacher : treeMap.keySet())
		{
			System.out.println(teacher.toString() + "===" + treeMap.get(teacher));
		}
		
		// 测试能否再添加编号一样的对象
		treeMap.put(new Teacher("李四", 123), "成都");
		System.out.println(treeMap.toString());
	}
}

class Teacher
{
	private String name;
	private int no;
	
	public  Teacher(String aName, int aNo)
	{
		name = aName;
		no = aNo;
	}
	
	public String getName()
	{
		return name;
	}
	public int getNo()
	{
		return no;
	}
	@Override
	public String toString()
	{
		return "Teacher [name=" + name + ", no=" + no + "]";
	}
	
	
}

标签:Java,java,知识,System,println,集合,new,public,out
From: https://blog.51cto.com/u_16200991/7150602

相关文章

  • Java I/O流相关操作
    一、FileReader读入数据的基本操作适用于纯文本文件,如TXT文件使用throws的方式处理异常packagecom.java.main;importjava.io.File;importjava.io.FileNotFoundException;importjava.io.FileReader;importjava.io.IOException;publicclassTestStream{ publicstati......
  • JAVA 进制转换
    1.10进制转换16进制Stringhex=Integer.toHexString(numb);2.10进制转换n进制Stringhex=Integer.toString(10,n);3.n进制转换10进制方法1.BigIntegerhex=newBigInteger("字符",n);intnum=hex.intValue();System.out.println(num);方法2.int hex=Integer......
  • Java中BigDecimal怎样取反
    在Java中,正确的类名应该是BigDecimal,而不是bigdemcial。BigDecimal用于高精度的十进制计算。要对BigDecimal对象进行取反操作,可以使用negate()方法。以下是一个示例:importjava.math.BigDecimal;publicclassMain{publicstaticvoidmain(String[]args){BigDe......
  • java实现本地数据与阿里云MySQL数据同步:动态表创建与数据更新
    在开发应用程序时,经常需要将数据从一个数据源(如API、外部数据库等)同步到本地数据库中。这可能涉及到不同的表结构和数据模式。在这种情况下,一个主要的挑战是,如果本地数据库中的表结构与源数据不匹配,应该如何自动适应这些变化并确保数据同步的顺利进行。解决方案:动态表创建与数据......
  • KubeSphere 社区双周报 | Java functions framework 支持 SkyWalking | 2023.8.4-8.17
    KubeSphere社区双周报主要整理展示新增的贡献者名单和证书、新增的讲师证书以及两周内提交过commit的贡献者,并对近期重要的PR进行解析,同时还包含了线上/线下活动和布道推广等一系列社区动态。本次双周报涵盖时间为:2023.08.04-2023.08.17。贡献者名单新晋KubeSphereCon......
  • 三大线上知识付费平台有哪些,体验如何
    离开学校以后,投资自己的不懈学习成为了我认为最明智的选择之一。虽然我从事教培咨询行业,但我也是知识付费领域的资深探索者。在这里,我将以用户的身份,分享我在三大线上知识付费平台的体验,希望能为大家提供一些参考。同时,我想向您介绍一款备受欢迎的私域场景下的知识付费解决方案—......
  • 荔枝微课:知识付费领域的明智选择,兔知云课堂为您提供专业支持
    在如今知识付费的浪潮下,选择一个合适的小程序平台成为卖课者们共同面对的问题。而在众多小程序中,荔枝微课以其独特的优势,逐渐成为了许多知识传播者的首选。让我们一起来了解荔枝微课的优点吧。免费使用,轻松上手相较于其他小程序平台,荔枝微课的最大亮点之一就是免费使用。常规的......
  • 揭秘知识付费软件排名:兔知云课堂引领私域知识付费新潮流
    在当今数字化时代,知识付费已经成为越来越多人分享专业知识、寻找创业机会的热门方式。许多人都在探索适用于自己的知识付费小程序。今天,我将会为您分享一个基于产品评分和综合热度的知识付费软件排名,其中也会涵盖兔知云课堂,这是一款低成本的音视频课程点播系统,专为私域场景打造的......
  • 找到最适合您的课程销售平台,了解知识付费三大类别
    在如今的知识付费时代,选择一个合适的平台来销售您的课程至关重要。我将为您介绍不同类型的知识付费平台,以及其中的特点。如果您想了解更多关于适合私域场景的知识付费解决方案,请访问兔知云课堂的网址:https://knowledge.mutouweb.com/。 了解平台分类 在选择知识付费平台时,......
  • 学浪、荔枝微课平台的平替,兔知云课堂知识付费源码
    经历了雪浪下架风波后,我们深刻认识到“鸡蛋不能放在一个篮子里”的道理。尽管现在已经恢复正常,但这段经历仍然促使我们在寻找其他课程上架平台的同时,审慎对待不同的推销信息。作为知识付费领域的一份子,我希望分享一款备受认可的私域场景下的知识付费解决方案——兔知云课堂。如果......