Java中集合类

简介: Java中集合类

集合类介绍


数组无法存放映射关系的数据,集合类可以。(集合类又称为容器类)


数组中可以放基本类型与对象。

集合中只能放对象。


集合类都被放在java.util中


Java集合分为Collection和Map



1、List集合


基本操作:


1.索引查看


get(index) 进行索引


2.添加对象


add()


3.获得对应值首次出现位置以及最后出现位置


indexof("")

lastindexof("")


4.获取两下标之间范围


subList(int lindex,int rindex)



ArrayList类


是有序的,可重复的集合,有顺序的索引,并且可以通过索引访问位置,允许重复值的


缺点:插入或删除速度慢。(类似于数组)


具体操作:


1.三种初始化:


1.ArrayLsit list1=new ArrayList();

2.ArrayLsit list1=new ArrayList(5); 确定容量

3.ArrayLsit list1=new ArrayList(list2); a为集合或数组


2.添加


add() 插入对应类型的数据


3.移除


1.remove(index) 删除对应下标

2.remove(“a”) 删除对应内容


4.容量


size() 得到容器中容量


5.替换


set(int index,“a”) 第一个参数是位置,第二个是插入的内容


6.清空


clear() 进行对容器清空


7.索引查看


get(index) 对下标进行索引



LinkedList类


链表结构

优点:插入和删除速度快


1.创建对象


LinkedList< String> list = new LinkedList< String>


2.索引查看


get(index) 下标进行索引


3.获取第一个或者最后一个要查找内容


getfirst()

getlast()


4.加入到首部或者加入到尾部


addfirst()

addlast()


5.移除首部或者尾部


removefirst()

removelast()





2、Set集合


可以依次把多个对象放进Set集合中,这个集合不能记住元素的添加顺序,不包含重复数,最多只包含一个null



HashSet类


使用的是Hash算法,有很好的存取与查找性能


特点:


1.顺序可能发生变化,不与添加顺序同步

2.不是同步的,如果多个线程同时访问或修改一个Hashset,通过代码保证其同步

3.集合可以使null


用hashcode()hashcode 值,根据值来决定它的位置

若两个equals相等,hascode不相等,会存储不同位置

若两项都相等,两个元素相同


1.创建实例


HashSet hs=new Hashset()

HashSet< String> hss=new HashSet< String>();


2.添加


add()


3.使用迭代器进行遍历


Iterator< String>it=hs.iterator(); //需要使用iterator()来得到初始位置,并且应当是相同类型的

it.hasnext() //检查序列中是否还有元素

it.next() //返回下一个元素


while(it.hasnext())
{
  System.out.println(it.next());  //进行遍历
}



TreeSet类

实现set接口和sortedset接口,并且它是自然排序的


其中sortedset是set的子接口


使用Comparable接口排序


1.创建实例


Treeset< Double> scores=new Treeset< Double>();


2.返回第一个,最后一个


first();

last();


3.移除第一个或者最后一个


poolfirst()

poollast()


遍历和上面相同


4.是否存在


contains()


5.返回一个集合


subset() //范围之间

headset() //输入的值之前

tailset() //输入的值之后


如:SortedSet< Double> score2=score.tailset(90) //就是返回在90之后的


6.查询其中的值,通过索引


score2.toArray //获取数组

score2.toArray[i] //进行索引


7.求其中长度


score2.toArray().length



3、Map集合

HashMap

使用的是哈希算法存取键值对。

其中键为key,值为value


1.创建实例


HashMap users = new HashMap();

HashMap< String,int> users = new HashMap();


2.存入类中


users.put(字符串,整型) //这里存入其中的只是上面1的第二种


3.判断是否包含指定的key


users.containskey(字符串) //返回的是true,false


4.键和值都可以作为一个集合


键:users.keyset()

值:users.values()

注释:可以使用for each来遍历,但是JDK版本需要1.5之后


5.获取迭代器(键值对 对象)中的键和值


首先需要迭代器 Iterator> entries = map.entrySet().iterator();

int key=entries.getkey()

int value=entries.getvalue()


拓展:其中的Entry是Map集合中的键值对 对象 通过键值对可以访问这个键值对中的key或者value


四种遍历


1.在 for 循环中使用 entries 实现 Map 的遍历(最常见和最常用的)


for (Map.Entry<String, String> entry : map.entrySet()) {
        String mapKey = entry.getKey();
        String mapValue = entry.getValue();
        System.out.println(mapKey + ":" + mapValue);
    }


2.使用 for-each 循环遍历 key 或者 values,一般适用于只需要 Map 中的 key 或者 value 时使用。性能上比 entrySet 较好。


// 打印键集合
for (String key : map.keySet()) {
    System.out.println(key);
}
// 打印值集合
for (String value : map.values()) {
    System.out.println(value);
}


3.使用迭代器(Iterator)遍历


Iterator<Entry<String, String>> entries = map.entrySet().iterator();
while (entries.hasNext()) {
    Entry<String, String> entry = entries.next();
    String key = entry.getKey();
    String value = entry.getValue();
    System.out.println(key + ":" + value);
}


4.通过键找值遍历,这种方式的效率比较低,因为本身从键取值是耗时的操作。


for(String key : map.keySet()){
    String value = map.get(key);
    System.out.println(key+":"+value);
}


TreeMap


可以对键对象进行排序

其余的大致操作与HashMap相似可以看上方


相关文章
|
5天前
|
存储 安全 Java
Java 集合框架中的老炮与新秀:HashTable 和 HashMap 谁更胜一筹?
嗨,大家好,我是技术伙伴小米。今天通过讲故事的方式,详细介绍 Java 中 HashMap 和 HashTable 的区别。从版本、线程安全、null 值支持、性能及迭代器行为等方面对比,帮助你轻松应对面试中的经典问题。HashMap 更高效灵活,适合单线程或需手动处理线程安全的场景;HashTable 较古老,线程安全但性能不佳。现代项目推荐使用 ConcurrentHashMap。关注我的公众号“软件求生”,获取更多技术干货!
27 3
|
2月前
|
Java 开发者
在 Java 中,一个类可以实现多个接口吗?
这是 Java 面向对象编程的一个重要特性,它提供了极大的灵活性和扩展性。
160 57
|
12天前
|
JSON Java Apache
Java基础-常用API-Object类
继承是面向对象编程的重要特性,允许从已有类派生新类。Java采用单继承机制,默认所有类继承自Object类。Object类提供了多个常用方法,如`clone()`用于复制对象,`equals()`判断对象是否相等,`hashCode()`计算哈希码,`toString()`返回对象的字符串表示,`wait()`、`notify()`和`notifyAll()`用于线程同步,`finalize()`在对象被垃圾回收时调用。掌握这些方法有助于更好地理解和使用Java中的对象行为。
|
22天前
|
存储 缓存 安全
Java 集合江湖:底层数据结构的大揭秘!
小米是一位热爱技术分享的程序员,本文详细解析了Java面试中常见的List、Set、Map的区别。不仅介绍了它们的基本特性和实现类,还深入探讨了各自的使用场景和面试技巧,帮助读者更好地理解和应对相关问题。
39 5
|
2月前
|
存储 缓存 安全
Java 集合框架优化:从基础到高级应用
《Java集合框架优化:从基础到高级应用》深入解析Java集合框架的核心原理与优化技巧,涵盖列表、集合、映射等常用数据结构,结合实际案例,指导开发者高效使用和优化Java集合。
44 4
|
2月前
|
存储 缓存 安全
java 中操作字符串都有哪些类,它们之间有什么区别
Java中操作字符串的类主要有String、StringBuilder和StringBuffer。String是不可变的,每次操作都会生成新对象;StringBuilder和StringBuffer都是可变的,但StringBuilder是非线程安全的,而StringBuffer是线程安全的,因此性能略低。
65 8
|
2月前
|
存储 安全 Java
java.util的Collections类
Collections 类位于 java.util 包下,提供了许多有用的对象和方法,来简化java中集合的创建、处理和多线程管理。掌握此类将非常有助于提升开发效率和维护代码的简洁性,同时对于程序的稳定性和安全性有大有帮助。
76 17
|
2月前
|
Java
Java 8 引入的 Streams 功能强大,提供了一种简洁高效的处理数据集合的方式
Java 8 引入的 Streams 功能强大,提供了一种简洁高效的处理数据集合的方式。本文介绍了 Streams 的基本概念和使用方法,包括创建 Streams、中间操作和终端操作,并通过多个案例详细解析了过滤、映射、归并、排序、分组和并行处理等操作,帮助读者更好地理解和掌握这一重要特性。
37 2
|
2月前
|
存储 Java
判断一个元素是否在 Java 中的 Set 集合中
【10月更文挑战第30天】使用`contains()`方法可以方便快捷地判断一个元素是否在Java中的`Set`集合中,但对于自定义对象,需要注意重写`equals()`方法以确保正确的判断结果,同时根据具体的性能需求选择合适的`Set`实现类。
|
2月前
|
安全 Java
Java多线程集合类
本文介绍了Java中线程安全的问题及解决方案。通过示例代码展示了使用`CopyOnWriteArrayList`、`CopyOnWriteArraySet`和`ConcurrentHashMap`来解决多线程环境下集合操作的线程安全问题。这些类通过不同的机制确保了线程安全,提高了并发性能。