Java教程 第71页

Java 队列-国外主机测评 - 国外VPS,国外服务器,国外云服务器,测评及优惠码

Java 队列

Java集合教程 – Java队列 队列是只能在其上执行操作的对象的集合两端的队列。 队列有两个末端,称为头和尾。 在简单队列中,对象被添加到尾部并从头部删除并首先删除首先添加的对象。 Java Collections Framework支持以下类型的队列。 简单的队列允许在尾部插入和从头部移除。 优先级队列为每个元素分配优先级,并允许从队列中删除具有最高优先级的元素。 延迟队列向每个元素添加延迟,并仅在其延迟已过去时删除该元素。 双端队列允许其元件从头部和尾部插入和移除。 阻塞队列阻塞线程,当线程已满时向其添加元素,当线程为空时,它阻止线程从中删除元素。 传输队列是阻塞队列,其中对象的切换发生在生产者线程和消费者线程之间。 阻塞双端队列是双端队列和阻塞队列的组合。 简单队列 简单队列由 Queue 接口的实例表示。 队列允许您执行三个基本操作: 从尾部添加元素 从其头部移除元素 在元素顶部审查 Queue接口为三个操作中的每一个定义了两个方法。如果操作不可能,一个方法抛出异常,另一个方法方法返回false或null以指示失败。 方法 描述 boolean add(E e) 如果可能,向队列中添加一个元素。否则,它抛出异常。 boolean offer(E e) 如果不能添加元素,则将元素添加到队列中,而不抛出异常。 它在失败时返回false,在成功时返回true。 E remove() 删除队列的头。如果队列为空,它会抛出异常。此方法返回已移除的项目。 E poll() 从队列中删除元素。如果队列为空而不是抛出异常,则返回null。 Eelement() 偷看队列的头,而不从队列中删除它。 如果队列为空,它会抛出异常。 E peek() 查看队列,如果队列为空而不是抛出异常,则返回null。 LinkedList和PriorityQueue是Queue接口的两个实现类。LinkedList还实现了List接口。 Queue APIs LinkedList APIs Stack APIs 例子 以下代码显示如何将链表用作FIFO队列。 import java.util.LinkedList; import java.util.NoSuchElementException; import java.util.Queue; public class Main { public static void main(String[] args) { Queue<String> queue = new LinkedList<>(); queue.add("Java"); // offer() will work the same as add() queue.offer("SQL"); queue.offer("CSS"); queue.offer("XML"); System.out.println("Queue: " + queue); // Let"s remove elements until the queue is empty while (queue.peek() != null) { System.out.println("Head Element: " + queue.peek()); queue.remove(); System.out.println("Removed one element from Queue"); System.out.println("Queue:...

Java 列表-国外主机测评 - 国外VPS,国外服务器,国外云服务器,测评及优惠码

Java 列表

Java集合教程 – Java列表 列表是对象的有序集合,在 List 界面中定义。 List  接口表示集合框架中的列表。 列表可以具有重复的元素。并且我们可以在列表中存储多个空值。 List 接口继承了集合接口和它添加了一些方法来支持使用索引访问其元素。 我们可以在 List 或的末尾添加一个元素在由整数索引标识的任何位置。 列表中元素的索引是从零开始的。 我们可以使用以下方法使用索引添加,获取,删除和替换其元素。 its add(int index, E element), addAll(int index, Collection<? extends E> c), get(int index), remove(int index) set(int index, E element) 我们可以搜索元素的位置 List 使用indexOf(Object o)或 lastIndexOf(Object o)方法。 indexOf()方法搜索指定的对象从开始,它返回索引的对象的第一次出现。 lastIndexOf()方法从列表的末尾搜索元素。两个方法都返回-1如果 List 不包含指定的对象。 subList(int fromIndex,int toIndex)返回一个子列表的原始列表从索引fromIndex(包括)到索引toIndex(独占)。 ListIterator 从 List 接口可以返回在向前和向后方向上遍历其元素。 List APIs ArrayList和LinkedList 以下是实现 List 接口的两个类: ArrayList LinkedList ArrayList由数组备份。链接列表由链接列表备份。 如果我们频繁地访问列表的元素,那么 ArrayList 会表现得更好。访问ArrayList中的元素更快,因为它是数组后端。 从 ArrayList 添加或删除元素更慢除非从头到尾,因为 ArrayList 必须执行数组副本内部保持元素的顺序。 LinkedList 的性能优于 ArrayList 用于添加和从列表中间删除元素。但是,访问列表中的元素更慢,除非在列表的头部。 import java.util.ArrayList; import java.util.List; public class Main { public static void main(String[] args) { List<String> list = new ArrayList<>(); list.add("Java"); list.add("Oracle"); list.add("CSS"); list.add("XML"); System.out.println("List: " + list); int count = list.size(); System.out.println("Size of List: " + count); // Print each element with its index for (int i...

Java 导航集-国外主机测评 - 国外VPS,国外服务器,国外云服务器,测评及优惠码

Java 导航集

Java集合教程 – Java导航集 导航集是一个有序集,允许您使用其子集在各种方式。 NavigableSet 表示Java集合中的可导航集合框架。 NavigableSet 接口继承了SortedSet接口和扩展 SortedSet 。 NavigableSet 界面可以以相反的顺序导航集合与SortedSet中定义的顺序相比。 headSet(), tailSet()和 subSet()从 NavigableSet 接口接受布尔标志以将元素包括在子集边界的开始或结束处。 lower(),floor(),higher()和ceiling()从NavigableSet接口搜索基于搜索条件的元素。 lower()方法返回小于指定元素的最大元素。 floor()方法返回 NavigableSet 中小于或等于指定元素的最大元素。 higher()方法返回最小元素大于指定元素的 NavigableSet 。 ceiling()方法返回 NavigableSet 中大于或等于指定元素的最小元素。 pollFirst()和 pollLast()分别检索和删除 NavigableSet 的第一个和最后一个元素。 如果NavigableSet为空,它们返回null。 TreeSet 类是 NavigableSet 接口的实现类之一。我们可以使用 TreeSet 作为集合,排序集合和可导航集合。 TreeSet APIs 例子 import java.util.NavigableSet; import java.util.TreeSet; public class Main { public static void main(String[] args) { NavigableSet<Integer> ns = new TreeSet<>(); ns.add(0); ns.add(1); ns.add(2); ns.add(3); ns.add(4); ns.add(5); ns.add(6); // Get a reverse view of the navigable set NavigableSet<Integer> reverseNs = ns.descendingSet(); // Print the normal and reverse views System.out.println("Normal order: " + ns); System.out.println("Reverse order: " + reverseNs); NavigableSet<Integer> threeOrMore = ns.tailSet(3, true); System.out.println("3 or more: " + threeOrMore); System.out.println("lower(3): " + ns.lower(3)); System.out.println("floor(3): " + ns.floor(3)); System.out.println("higher(3): " +...

Java 排序集-国外主机测评 - 国外VPS,国外服务器,国外云服务器,测评及优惠码

Java 排序集

Java集合教程 – Java排序集 排序集是在其元素上有排序的集合。 SortedSet 接口表示Java集合中的排序集合框架。 排序集中的元素可以按照自然顺序排序可比较的接口或使用 Comparator 。 SortedSet 必须知道如何在添加元素时对其元素进行排序检查两个接口: 如果它的元素实现了Comparable接口,它将使用compareTo()方法来排序项目。 我们可以称之为自然顺序排序。 我们可以传递一个比较器做自定义排序。 如果指定了 Comparator ,则 Comparator 是用于排序并忽略 Comparable 接口。 TreeSet 类是Collection框架中SortedSet接口的一个实现。 TreeSet API SortedSet API 例子 在下面的代码中,我们添加 String 对象 SortedSet 。 String 类实现 Comparable 接口。 SortedSet将使用 Comparable 接口及其 compareTo()方法对String值进行排序。 import java.util.SortedSet; import java.util.TreeSet; public class Main { public static void main(String[] args) { // Create a sorted set of some names SortedSet<String> sortedNames = new TreeSet<>(); sortedNames.add("Java"); sortedNames.add("SQL"); sortedNames.add("HTML"); sortedNames.add("CSS"); // Print the sorted set of names System.out.println(sortedNames); } } 上面的代码生成以下结果。 例2 以下代码显示如何存储在 SortedSet 中的人物对象列表。 我们不能添加Person类的对象在SortedSet中,除非我们还提供一个 Comparator 对象因为Person类不实现 Comparable 接口。 以下代码创建一个 SortedSet 的使用 Comparator 的人使用他们的名字排序的人: SortedSet<Person> personsSortedByName = new TreeSet<>(Comparator.comparing(Person::getName)); 该代码使用方法引用来创建用于创建Comparator对象的lambda表达式。 import java.util.Comparator; import java.util.SortedSet; import java.util.TreeSet; public class Main { public static void main(String[] args) { SortedSet<Person>...

Java 映射操作-国外主机测评 - 国外VPS,国外服务器,国外云服务器,测评及优惠码

Java 映射操作

Java集合教程 – Java映射操作 映射迭代 要迭代地图的键,值或条目,使用映射的 keySet(), values()和 entrySet它分别返回一组键,值集合和一组条目。 以下代码段显示了如何打印映射的所有键: import java.util.HashMap; import java.util.Map; import java.util.Set; public class Main { public static void main(String[] args) { Map<String, String> map = new HashMap<>(); map.put("CSS", "style"); map.put("HTML", "mark up"); map.put("Oracle", "database"); map.put("XML", "data"); // Get the set of keys Set<String> keys = map.keySet(); // Print all keys using the forEach() method. keys.forEach(System.out::println); } } 上面的代码生成以下结果。 映射条目 映射中的每个键值对都称为条目。条目由 Map.Entry<K,V> 接口的实例表示。 Map.Entry 是 Map 接口的内部静态接口。 Map.Entry 有三个方法调用 getKey(), getValue()和 setValue()它返回条目的键值,值,并分别在条目中设置新值。 Map的条目集上的典型迭代如下: import java.util.HashMap; import java.util.Map; import java.util.Set; public class Main { public static void main(String[] args) { Map<String, String> map = new HashMap<>(); map.put("CSS", "style"); map.put("HTML", "mark up"); map.put("Oracle", "database"); map.put("XML", "data"); // Get the entry Set Set<Map.Entry<String, String>> entries = map.entrySet(); entries.forEach((Map.Entry<String, String> entry)...

Java 按位运算符-国外主机测评 - 国外VPS,国外服务器,国外云服务器,测评及优惠码

Java 按位运算符

Java教程 – Java按位运算符 按位操作符作用于其操作数的各个位。Java按位运算符可以应用于整数types: long,int,short,char,byte 。 按位运算符列表 下表列出了所有Java按位运算符。 运算符 结果 ~ 按位一元NOT & 按位AND | 按位或 ^ 按位异或 >> 向右移动 >>> 右移零填充 << 向左移动 &= 按位AND分配 |= 按位OR分配 ^= 按位异OR分配 >>= 右移赋值 >>>= 右移零填充分配 <<= 向左移位 按位运算符分配将赋值与按位运算组合。以下两个语句是等效的: a = a >> 4; a >>= 4; 以下两个语句是等效的: a = a | b; a |= b; 以下程序演示了按位运算符分配: public class Main { public static void main(String args[]) { int a = 1; int b = 2; int c = 3; a |= 2; b >>= 2; c <<= 2; a ^= c; System.out.println("a = " + a); System.out.println("b = " + b); System.out.println("c = " + c); } } 此程序的输出如下所示: Java左移运算符 左移位算子,<<移位所有位中的一个值到左边一个指定的数字的时间。 它有这种一般形式: value << num 以下代码移位字节类型变量。 public class Main { public static...

Java 关系运算符-国外主机测评 - 国外VPS,国外服务器,国外云服务器,测评及优惠码

Java 关系运算符

Java教程 – Java关系运算符 Java关系运算符确定两个操作数之间的关系。 关系运算符列表 Java中的关系运算符是: 运算符 结果 == 等于 != 不等于 > 大于 < 小于 >= 大于或等于 <= 小于或等于 例如,以下代码段完全有效。它比较两个int值并将结果分配给布尔值c。 public class Main { public static void main(String[] argv) { int a = 4; int b = 1; boolean c = a < b; System.out.println("c is " + c); } } a <b(为假)的结果存储在c中。 例子 关系运算符的结果是一个布尔值。在下面的代码中, System.out.println 输出关系运算符的结果。 public class Main { public static void main(String args[]) { // outcome of a relational operator is a boolean value System.out.println("10 > 9 is " + (10 > 9)); } } 此程序生成的输出如下所示:

Java 注释语句-国外主机测评 - 国外VPS,国外服务器,国外云服务器,测评及优惠码

Java 注释语句

Java教程 – Java注释语句 源代码中的注释提供有关源代码的信息。这是一个很好的做法是编写注释来记录源代码 Java中支持三种类型的注释。 单行 多行 文档注释 单行注释 Java单行注释从 // 开始,结束到该行结束。 public class Main { // This is a single line comment. public static void main(String[] argv) { } } 多行注释 Java多行注释在 /* 和 */ 之间。编译器忽略从 /* 到 */ 的所有内容。 public class Main { /* This is a Multiline comment. */ public static void main(String[] argv) { } } Java文档注释(Javadoc) Javadoc文档注释用于生成用于记录程序的HTML文件。总之我们通常调用Java文档评论javadoc。 Javadoc注释占用一行或多行源代码。文档注释以 /** 开头,并以 */ 结尾。从/**到*/的所有内容都被编译器忽略。 以下示例演示Javadoc注释: /** * Application entry point * * @param args array of command-line arguments passed to this method */ public static void main(String[] args) { // TODO code application logic here } 此示例从描述main()方法的Javadoc注释开始。 /** 和 */ 包含方法的描述,其可以包括诸如的HTML标签<p> ,<code> 和 /</code> 和 @param Javadoc标记(一个@前缀指令)。 以下列表标识几个常用的标签: @author 标识源代码的作者。 @deprecated 标识不应再使用的源代码实体。 @param 标识方法的参数之一。 @see 提供了一个see-also参考。 @since...

Java 变量类型-国外主机测评 - 国外VPS,国外服务器,国外云服务器,测评及优惠码

Java 变量类型

Java教程 – Java变量类型 Java对象引用变量 对象引用变量在分配发生时以不同的方式工作。 例如, Box b1 = new Box(); Box b2 = b1; 该片段执行后, b1 和 b2 将指向相同的对象。 b1到b2的赋值没有分配任何内存或复制任何部分原始对象。 它简单地使b2指向与b1相同的对象。因此,通过b2对对象所做的任何更改将影响b1所引用的对象。 对b1的后续赋值将简单地从原始对象中解除b1而不影响对象或影响b2。 例如: Box b1 = new Box(); Box b2 = b1; // ... b1 = null; 这里,b1已设置为null,但b2仍指向原始对象。 Java对象引用变量 class Box { int width; int height; int depth; } public class Main { public static void main(String args[]) { Box myBox1 = new Box(); Box myBox2 = myBox1; myBox1.width = 10; myBox2.width = 20; System.out.println("myBox1.width:" + myBox1.width); System.out.println("myBox2.width:" + myBox2.width); } } 上面的代码生成以下结果。 Java方法参数传递 当一个参数传递给一个方法时,它可以通过值或引用传递。Pass-by-Value将参数的值复制到参数中。对参数所做的更改对参数没有影响。按引用传递参数传递对参数的引用。对参数所做的更改将影响参数。 当一个简单的基本类型传递给一个方法时,它是通过使用call-by-value来完成的。 对象通过使用调用引用传递。 以下程序使用“传递值”。 class Test { void change(int i, int j) { i *= 2; j /= 2; } } public class Main { public static void main(String args[]) { Test ob = new...

Java 抽象类-国外主机测评 - 国外VPS,国外服务器,国外云服务器,测评及优惠码

Java 抽象类

Java教程 – Java抽象类 抽象类是抽象的想法或概念。例如,int数据类型是一个具体的数据类型,double是另一个数据类型具体数据类型。 他们都是数字。 这里数字是一个抽象的概念。形状是另一个例子。 我们可以有备用,矩形或三角形或圆形。 他们都是具体的,而形状是一个抽象类。 在Java中,我们使用抽象类来定义抽象概念。 抽象概念必须有一些抽象方面。 例如,抽象概念是Shape,而抽象方面是如何计算面积。抽象概念在Java中变成抽象类,抽象方面成为抽象方法。 语法 您可以要求通过指定子类来重写某些方法抽象类型修饰符。要声明抽象方法,请使用以下一般形式: abstract type name(parameter-list); 抽象方法没有方法体。任何包含一个或多个抽象方法的类也必须声明为抽象。 abstract class MyAbstractClass{ abstract type name(parameter-list); } 这里是一个抽象类,后面是一个实现其抽象方法的类。 abstract class MyAbstractClass { abstract void callme(); void callmetoo() { System.out.println("This is a concrete method."); } } class B extends MyAbstractClass { void callme() { System.out.println("B"s implementation of callme."); } } public class Main { public static void main(String args[]) { B b = new B(); b.callme(); b.callmetoo(); } } 输出: 例子 下面的代码将 Shape 类定义为abstract。  shape 类有抽象方法称为area()。 Rectangle 类扩展抽象类 Shape 并为其自身实现area()方法。 abstract class Shape { double height; double width; Shape(double a, double b) { height = a; width = b; } abstract double area(); } class Rectangle extends Shape{ Rectangle(double a, double b) { super(a, b);...