精华内容
下载资源
问答
  • 顶层容器是进行图形编程的基础,一切图形化的东西,都必然包括在顶层容器中。在Swing中,我们有三种可以使用的顶层容器,它们分别是:JFrame:用来设计类似于Windows系统中的窗口形式的应用程序。JDialog:和JFram...

    1.顶层容器

    什么是顶层容器?当我们使用Java进行图形编程的时候,图在哪里绘制呢?我们需要一个能够提供图形绘制的容器,这个容器就被称为顶层容器,你

    也可以把它想象成一个窗口。顶层容器是进行图形编程的基础,一切图形化的东西,都必然包括在顶层容器中。在Swing中,我们有三种可以使用的顶层容器,

    它们分别是:

    JFrame:用来设计类似于Windows系统中的窗口形式的应用程序。

    JDialog:和JFrame类似,只不过JDialog是用来设计对话框。

    JApplet:用来设计可以在嵌入在网页中的Java小程序。

    如果需要使用Swing制作一个窗口类程序,我们的代码看起来应该是这样:

    import javax.swing.*;

    public class KyodaiUI

    extends JFrame {

    ……

    }

    2.控件

    控件是构成应用程序界面的基本元素,按钮、文本框、进度条等,这些都是控件。控件(这里我们只讨论可视化控件)又可以分为容器控件和非容器控件。从字面

    意义上来理解,容器控件就是能包含其他控件的特殊控件,例如,Java中的JPanel控件就属于容器型控件,我们可以在JPanel中放置按钮、文本框

    等非容器控件,你甚至可以在JPanel中再放置若干个JPanel控件(值得注意的是,顶层容器也是容器型控件,每一个窗口应用程序中有且只能有一个顶

    层容器控件,换句话说,顶层容器不能包括在其他的控件中)。

    Java中的容器控件有很多,除刚才提到的JPanel外,还有

    JTabbedPane、JScrollPane等,非容器控件有JButton、JLabel、JTextField等。如果你需要向某个容器型的控件

    中添加控件,你可以使用 add(Component comp) 方法来实现,如:

    JPanel panel = new JPanel();

    JButton button = new JButton();

    panel.add(button);

    3.边框

    虽然我们使用了不同前景色来区别不同的区域,然而却没有层次感,加上边框一定会漂亮许多。

    在Java中,所有以J打头的Swing控件都可以使用setBorder方法来为自己设置边框。边框有很多种,线型、凸起、凹下、空的

    展开全文
  • JAVA容器类框架

    2018-10-31 19:17:15
    2、知道接口之后,就知道类库是如何分类的,通过接口的实现类包括抽象类的子类,就可以了解到,它到底有哪些具体的实现类,因此首先要掌握基本结构是什么,首先要了解主要接口。 3、Collection是容器类中,容器类中...

    jdk中现有的类库

    1、学习类库,重点是要掌握基本结构,容器类框架中,到底提供了哪些类,它们之间是怎么样构成的,它们之间的关系是什么。

    2、知道接口之后,就知道类库是如何分类的,通过接口的实现类包括抽象类的子类,就可以了解到,它到底有哪些具体的实现类,因此首先要掌握基本结构是什么,首先要了解主要接口。

    在这里插入图片描述

    3、Collection是容器类中,容器类中,描述容器中的一个接口,它有三个子接口,分别是Set、List、Queue(jdk5中实现的)

    4、Set的实现类是HashSet;
    List是由ArrayList(数组)和LinkList(链表)实现的;
    Queue是由LinkList(链表)实现的;

    5、所以说,LinkList既可以作为List(列表),同时也可以作为一个(Queue)对列来用。

    6、Iterator是迭代器

    7、上面的都是位于 java.util.*;这个包中,需要导入之后才能使用。


    在这里插入图片描述

    1、Map中,可以根据key来取value

    展开全文
  • 通过上一篇文章,我们已经知道设计一个线程安全类的原则和步骤,以及在设计...这篇主要简单介绍 Java 集合库包含哪些常用的容器类,它们可以简单区分为: 非同步集合 同步集合 并发集合 那么,它们分别包括哪些具...

    通过上一篇文章,我们已经知道设计一个线程安全类的原则和步骤,以及在设计过程中我们应当注意的细节。实际上,Java 的集合库包含了线程安全集合和非线程安全集合,可以说 Java 的线程安全集合库就是按照前一篇说到的实例封闭、安全性的委托、组合这几个方式来实现的。

    这篇主要简单介绍 Java 集合库包含哪些常用的容器类,它们可以简单区分为:

    • 非同步集合
    • 同步集合
    • 并发集合

    那么,它们分别包括哪些具体的集合类,它们有什么主要的区别,以及它们的框架是怎样的?

    这就是今天要讲的内容,读完这篇文章你应该要知道常用的集合库有哪些具体容器类,多线程的情况下应该用哪种集合以及它们的主要区别。

    Java 集合框架

    Java 集合工具包在 Java.util 包下,它包含了常用的数据结构,比如数组、链表、栈、队列、集合、哈希表等等。

    这里先放一张 Java 集合类的框架图:


    Java 集合框架

    Collection 接口是集合类的根接口,Java 中没有提供这个接口的直接的实现类。但是让其被继承产生了两个接口,就是 Set 和 List。Set中不能包含重复的元素。List是一个有序的集合,可以包含重复的元素,提供了按索引访问的方式。

    Map 是 Java.util 包中的另一个接口,它和 Collection 接口没有关系,是相互独立的,但是都属于集合类的一部分。Map 包含了 key-value 对。Map 不能包含重复的 key,但是可以包含相同的 value。

    其中还有一个 Iterator<E> 接口,Collection 继承了它,也就是说所有的集合类,都实现了Iterator接口,这是一个用于遍历集合中元素的接口,主要包含以下三种方法:

    1. hasNext()是否还有下一个元素。
    2. next()返回下一个元素。
    3. remove()删除当前元素。

    对于 Java 集合框架,这里不再做过多的说明,如果要完全剖析,那估计得再开一个专栏来讲。下面对具体容器类分类,我们直接来看他们分别属于哪些类型。

    非同步集合

    非同步集合,在并发访问的时候,是非线程安全的;但是由于它们没有同步策略(加锁机制),它们的效率更高。常用的非同步集合它们包括下面几个:

    • ArrayList
    • HashSet
    • HashMap
    • LinkedList
    • TreeSet
    • TreeMap
    • PriorityQueue

    同步集合

    对每个方法都进行同步加锁,保证线程安全。

    • HashTable
    • Vector
    • Stack
    • 同步包装器 : [ Collections.synchronizedMap(), Collections.synchronizedList() ]

    Java 集合类中非线程安全的集合可以用同步包装器使集合变成线程安全,其实实现原理就是相当于对每个方法加多一层同步锁而已,比如:

    1. HashMap --> Collections.synchronizedMap(new HashMap())
    2. ArrayList --> Collections.synchronizedList(new ArrayList<>())

    并发集合

    java.util.concurrent包下,并发容器类如下::

    • ConcurrentHashMap
    • ConcurrentSkipListMap
    • ConcurrentSkipListSet
    • CopyOnWriteArrayList
    • CopyOnWriteArraySet
    • ArrayBlockingQueue
    • LinkedBlockingQueue
    • PriorityBlockingQueue
    • LinkedBlockingDeque
    • ConcurrentLinkedQueue

    同步集合类和并发集合类的区别

    不管是同步集合还是并发集合他们都支持线程安全,他们之间主要的区别体现在性能和可扩展性,还有他们如何实现的线程安全

    同步集合类,Hashtable 和 Vector 还有同步集合包装类,Collections.synchronizedMap()和Collections.synchronizedList(),相比并发的实现(比如:ConcurrentHashMap, CopyOnWriteArrayList, CopyOnWriteHashSet)会慢得多。

    造成如此慢的主要原因是锁, 同步集合会把整个Map或List锁起来,每个操作都是串行的操作,同一时刻只有一个线程能操作。而并发集合不会,并发集合实现线程安全是通过使用先进的和成熟的技术把锁剥离。

    比如ConcurrentHashMap 会把整个Map 划分成几个片段,只对相关的几个片段上锁,同时允许多线程访问其他未上锁的片段。

    CopyOnWriteArrayList 允许多个线程以非同步的方式读,当有线程写的时候它会将整个List复制一个副本给它。如果在读多写少这种对并发集合有利的条件下使用并发集合,这会比使用同步集合更具有可伸缩性。

    本文完结,如果文章有误,请批评指正;如果对你有帮助,可以关注我,谢谢!

    展开全文
  • JDK 1.5 之前同步容器包括: Vector、Hashtable、Stack Collections 工具将普通容器,转变为同步容器,如: public static <T> Collection<T> synchronizedCollection(Collection<T> c) ...

    JDK 1.5 之前同步容器包括:

    • Vector、Hashtable、Stack
    • Collections 工具类将普通容器,转变为同步容器,如:
    public static <T> Collection<T> synchronizedCollection(Collection<T> c)
    public static <T> Set<T> synchronizedSet(Set<T> s)
    public static <T> List<T> synchronizedList(List<T> list)
    public static <K,V> Map<K,V> synchronizedMap(Map<K,V> m)

    同步容器的实现原理就是在容器的操作方法上,加上了 synchronized 关键字。


    List:CopyOnWriteArrayList

    • Set:CopyOnWriteArraySet、ConcurrentSkipListSet
    • Map:ConcurrentHashMap、ConcurrentSkipListMap
    • Queue:阻塞队列名称用 Blocking 标识,单端队列名称用 Queue 标识,双端队列名称用 Deque 标识
    1. 单端阻塞队列:ArrayBlockingQueue、LinkedBlockingQueue、SynchronousQueue、LinkedTransferQueue、PriorityBlockingQueue、DelayQueue
    2. 双端阻塞队列:LinkedBlockingDeque
    3. 单端非阻塞队列:ConcurrentLinkedQueue
    4. 双端非阻塞队列:ConcurrentLinkedDeque

     

    下面示例中,当不把 list 转变为同步容器,并发 add,最后主线程打印 list,可能会报 java.util.ConcurrentModificationException 和 java.lang.ArrayIndexOutOfBoundsException,去掉注释就可以并发新增元素(当然最后打印的 list 不一定是元素的情况)

    package constxiong.interview;
    
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.List;
    
    /**
     * 测试 同步容器与并发容器
     * @author ConstXiong
     * @date 2019-12-26 20:56:32
     */
    public class TestSynchronizedAndConcurrentCollection {
    	
    	static List<Integer> list = new ArrayList<Integer>();
    
    	public static void main(String[] args) throws InterruptedException {
    		testSynchronizedCollection();
    	}
    
    	/**
    	 * 测试同步容器
    	 * @throws InterruptedException 
    	 */
    	private static void testSynchronizedCollection() throws InterruptedException {
    //		list = Collections.synchronizedList(list);
    		for (int i = 0; i < 300; i++) {
    			final int index = i;
    			new Thread(() -> {
    				list.add(index);
    			}).start();
    		}
    		System.out.println(list);
    	}
    	
    }
    

     

    并发容器的使用很简单,跟普通容器类似,如:

        /**
    	 * 测试并发容器
    	 */
    	private static void testConcurrentCollection() {
    		for (int i = 0; i < 300; i++) {
    			final int index = i;
    			new Thread(() -> {
    				map.put(index, index);
    			}).start();
    		}
    		System.out.println(map);
    	}

     


    【Java面试题与答案】整理推荐

     

    展开全文
  • 通过上一篇文章,我们已经知道设计一个线程安全的原则和步骤,以及在设计过程中我们应当注意的细节。实际上,Java 的集合库包含了...那么,它们分别包括哪些具体的集合,它们有什么主要的区别,以及它们的框架是...
  • Java 并发包提供了哪些并发工具 Java 基础并发工具 提供了比 synchronized更加高级的各种同步结构,包括 CountDownLatch, CyclicBarrier、 Semaphore等,可以实现更加丰富的多线程操作,比如利用 Semaphore作为...
  • Java SE 是什么,包括哪些内容(二十一)? 本文内容参考自Java8标准 再次感谢Java编程思想对本文的启发! 在讨论接口Collection源码的时候谈到了集合(容器)都会实现的一个接口: Iterator 它是专门遍历迭代集合...
  • Java SE 是什么,包括哪些内容(二十一)? 本文内容参考自Java8标准 再次感谢Java编程思想对本文的启发! 在上一篇博文中讨论了集合(容器)的通用迭代器类型Iterator,这篇博文来讨论以下有关列表的专门迭代器: ...
  • Java 并发包提供了哪些并发工具Java 基础并发工具 提供了比 synchronized更加高级的各种同步结构,包括 CountDownLatch, CyclicBarrier、 Semaphore等,可以实现更加丰富的多线程操作,比如利用 Semaphore作为...
  • Java SE 是什么,包括哪些内容(二十一)? 本文内容参考自Java8标准 再次感谢Java编程思想对本文的启发! 前面的博文从概念性的角度分析了集合(容器)的功能作用,现在,再从顶层设计到底层设计(具体的实现)的具体...
  • Java SE 是什么,包括哪些内容(二十一)? 本文内容参考自Java8标准 再次感谢Java编程思想对本文的启发! 前面的博文从概念性的角度分析了集合(容器)的功能作用,现在,再从顶层设计到底层设计(具体的实现)的具体...
  • Java 并发包提供了哪些并发工具Java 基础并发工具 提供了比 synchronized更加高级的各种同步结构,包括 CountDownLatch, CyclicBarrier、 Semaphore等,可以实现更加丰富的多线程操作,比如利用 Semaphore作为...
  • Java SE 是什么,包括哪些内容(二十一)? 本文内容参考自Java8标准 顺序访问列表的一个常用实现: LinkedList 声明: public class LinkedList<E> extends AbstractSequentialList<E> ...
  • Java SE 是什么,包括哪些内容(二十一)? 本文内容参考自Java8标准 再次感谢Java编程思想对本文的启发! ①、batchRemove(Collection<?> c, boolean complement) //private方法,支撑内部的public方法 //...
  • java容器总结

    2019-09-19 11:05:14
    18.java 容器都有哪些? 数组 集合 String 19.Collection 和 Collections 有什么区别? Collections 是集合的工具,提供了包括线程安全转化,排序,搜索等功能 Collection 是集合的一个父类 20.List、Set、Map ...
  • java.util.concurrent 及其子包,集中了 Java 并发的各种基础工具,具体主要包括几个方面: 1)提供了比 synchronized 更加高级的各种同步结构,包括 CountDownLatch、CyclicBarrier、Semaphore 等,可以实现更加...
  • Java SE 是什么,包括哪些内容(二十一)? 本文内容参考自Java8标准 再次感谢Java编程思想对本文的启发! 首先,了解一个方法: Arrays的方法toString()。 你必须使用Arrays的方法toString()来产生数组的可打印...
  • Java容器、异常

    2020-08-09 16:10:27
    常用的集合哪些? Map接口和Collection接口是所有集合框架的父接口: Collection接口的子接口包括:Set接口和List接口 Map接口的实现主要有:HashMap、TreeMap、Hashtable、ConcurrentHashMap以及Properties等...
  • 18.Java 容器都有哪些? Java主要包括两种类型的容器,一种是Collection,存储一列元素,另一种是Map,存储键/值对映射。Collection接口又有3种子类型,List、Set和Queue。 19.Collection 和 Collections 有什么...
  • 问题一:Java有哪些容器? Java集合主要包括两种类型的容器,一种是集合(Collection),一种是Map,存键值对。Collection接口有三种子类型,List,Set,Queue(队列),再下面是一些抽象,然后是具体的实现,...
  • Java SE 是什么,包括哪些内容(二十)? 本文内容参考自Java8标准 再次感谢Java编程思想对本文的启发! 在Java SE5之前,使用容器的一个主要的问题是:编译器允许你向容器中插入不同的类型。例如,一个Apple对象的...
  • Java SE 是什么,包括哪些内容(二十一)? 本文内容参考自Java8标准 再次感谢Java编程思想对本文的启发! 如果你使用集合非常频繁,你肯定会用到两个有关集合的工具: ⑴、Arrays:提供了很多有关List的方法。 ⑵、...
  • Java SE 是什么,包括哪些内容(二十一)? 本文内容参考自Java8标准 再次感谢Java编程思想对本文的启发! 前面的博文从概念性的角度分析了集合(容器)的功能作用,现在,再从顶层设计到底层设计(具体的实现)的具体...
  • Java SE 是什么,包括哪些内容(二十一)? 本文内容参考自Java8标准 再次感谢Java编程思想对本文的启发! 在后续的博文中,将会重点介绍每种容器类的源码实现以及实现原理。 PS:时间有限,有关Java SE的内容会持续...
  • 实现List接口与Deque接口双向链表,实现了列表的所有操作,并且允许包括null值的所有元素,对于LinkedList定义我产生了如下疑问: 1.Deque接口是什么,定义了一个怎样的规范? 2.LinkedList是双向链表,其底层实现是...
  • JAVA相关基础知识1、面向对象的特征有哪些方面1.抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分...
  • Java集合

    2020-03-08 14:52:12
    1、Java 中常用的容器哪些? 常见容器主要包括 Collection 和 Map 两种,Collection 存储着对象的集合,而 Map 存储着键值对(两个对象)的映射表。 Collection Set SetTreeSet:基于红黑树实现,支持有序性...
  • 我工作三年了,该懂并发了!

    千次阅读 2020-08-31 07:23:18
    本文的组织形式如下,主要会介绍到同步容器类,操作系统的并发工具,Java 开发工具包(只是简单介绍一下,后面会有源码分析)。同步工具类有哪些。 下面我们就来介绍一下 Java 并发中都涉及哪些模块,这些并发模块...

空空如也

空空如也

1 2 3 4 5 6
收藏数 119
精华内容 47
关键字:

容器类包括哪些