我是Java的新手,正在尝试学习迭代器的概念.我在Java Tutorial Oracle中遇到过这段代码.我的问题是,什么是cond在if (!cond(it.next()))代表.文档没有说明cond()代表什么.
static void filter(Collection<?> c) {
for (Iterator<?> it = c.iterator(); it.hasNext(); )
if (!cond(it.next()))
it.remove();
}
Run Code Online (Sandbox Code Playgroud) 我试图在List中随机洗牌整数集合,我想出了两种改组方法来完成这项工作.但是,我不确定哪一个效果更好?有没有人有任何意见或建议?
public class TheCollectionInterface {
public static <E> void swap(List<E> list1, int i, int j) {
E temp = list1.get(i);
list1.set(i, list1.get(j));
list1.set(j, temp);
}
// Alternative version:
// public static void shuffling(List<?> list, Random rnd){
// for(int i = list.size(); i >= 1; i--){
// swap(list, i - 1, rnd.nextInt(i));
// }
// }
public static <E> void shuffling(List<E> list1, Random rnd) {
for (int i = list1.size(); i >= 1; i--){
swap(list1, i - 1, rnd.nextInt(list1.size()));
}
} …Run Code Online (Sandbox Code Playgroud) I have read that to calculate the hashcode for multidimensional array, one has to use Arrays.deepHashCode() method instead of Arrays.hashCode() method, but I don't really understand the technical reason behind it. Could someone please explain it to me?
Object[][] one = {
{1, 2, 3},
{11, 22, 33}
};
int two = Arrays.deepHashCode(one);
int three = Arrays.hashCode(one);
System.out.println("two " + two);
System.out.println("three " + three);
Run Code Online (Sandbox Code Playgroud)
Result:
two 997365
three 312355675
Run Code Online (Sandbox Code Playgroud) 在swift中,let如果变量在初始化后没有改变,建议用关键字声明变量.我看到很多变量被声明为let.
在java中,我认为关键字final可以起到同样的作用.但是根据我有限的经验,我只看到人们final在极少数情况下声明变量,例如PI.
为什么Java变量不final经常被声明?有什么我想念的吗?
我目前正在按照 Kip Irvine 的“汇编语言 x86 编程”一书学习汇编编程。
在书中,作者说
最常见的字符串类型以空字节(包含 0)结尾。称为以空字符结尾的字符串
在本书的后续部分,作者有一个没有空字节的字符串示例
greeting1 \
BYTE "Welcome to the Encryption Demo program "
Run Code Online (Sandbox Code Playgroud)
所以我只是想知道,在 x86 汇编语言中,空终止字符串和不以空终止的字符串有什么区别?它们可以互换吗?或者它们彼此不等价?
我是Java的新手,正在尝试学习界面的概念.我在网上看到了下面的代码.我知道接口无法实例化.我的问题是,WatchService,Path,WatchKey和WatchEvent都是接口,为什么变量可以分配给接口类型?实例化是一样的吗?
import java.io.IOException;
import java.nio.file.FileSystems;
import java.nio.file.Path;
import java.nio.file.Paths;
import static java.nio.file.StandardWatchEventKinds.ENTRY_CREATE;
import java.nio.file.WatchEvent;
import java.nio.file.WatchKey;
import java.nio.file.WatchService;
public class WatchServices {
public static void main(String[] args) throws IOException {
WatchService ws1 = FileSystems.getDefault().newWatchService();
Path p1 = Paths.get("/Users/justin/Desktop/Codes Netbean/JavaRandom");
WatchKey wk1 = p1.register(ws1, ENTRY_CREATE);
while(true){
for(WatchEvent<?> event : wk1.pollEvents()){
System.out.println(event.kind());
Path file = (Path)event.context();
System.out.println(file);
}
}
}
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试学习Java正则表达式,并尝试将较小的字符串与另一个字符串进行匹配.以下是我提出的代码.
String text = "this is the text to be searched for occurrences of the http://www.nba.com.";
String patternString = "http://.*";
Pattern p1 = Pattern.compile(patternString);
Matcher m1 = p1.matcher(text);
boolean doesItMatch = m1.matches();
System.out.println(doesItMatch);
System.out.println(m1.group());
Run Code Online (Sandbox Code Playgroud)
我期待着doesItMatch平等true和m1.group()平等http://nba.com..但是,IDE改为输出
false
Exception in thread "main" java.lang.IllegalStateException: No match found
at java.util.regex.Matcher.group(Matcher.java:536)
at java.util.regex.Matcher.group(Matcher.java:496)
at JTORegex.RegularExpression.main(RegularExpression.java:23)
Java Result: 1
Run Code Online (Sandbox Code Playgroud)
为什么字符串与字符串patternString不匹配text?patternString确实存在于text.为什么会这样?
我正在尝试Java HashSet类及其toArray()方法。下面是我想出的代码。编译器没有显示任何错误,但是当我运行代码时,IDE输出错误消息:
Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.Integer;
at JTOCollection.TheCollectionInterface.main(TheCollectionInterface.java:26)
Java Result: 1
Run Code Online (Sandbox Code Playgroud)
由于我的经验不足,我无法完全理解错误消息背后的全部原因,有人可以向我解释一下吗?
Set<Integer> set1 = new HashSet<>();
set1.add(1);
set1.add(2);
set1.add(3);
set1.add(2);
Integer[] intArray = (Integer[]) set1.toArray();
for(Integer i : intArray){
System.out.println(i);
}
Run Code Online (Sandbox Code Playgroud) 我正在研究x86汇编语言,遵循Kip Irvine的书"用于x86处理器的第7版Edi的汇编语言".
在第4章中,作者谈到了机器指令
我的问题是,为什么机器指令中没有al(或表示al)A0 00010400?如果al没有,机器怎么知道我们想要将地址的值移动00010400到al?
============ 编辑1 ===============
我试过mov bl var1并生成了一个机器代码bl
.386
.MODEL FLAT, STDCALL
.STACK 4096
ExitProcess PROTO, dwExitCode: DWORD
.DATA
var1 BYTE 10h
.CODE
main PROC
MOV BL, var1
invoke ExitProcess, 0
main ENDP
END main
Run Code Online (Sandbox Code Playgroud)
我目前正在学习java集合。我已经看到了Set接口及其子接口和具体实现类的类层次结构图。
没有对实线箭头和虚线箭头的含义进行解释。
根据我自己的判断,我假设实线箭头表示extends,虚线箭头表示Implements,但我的假设正确吗?
有没有关于这些符号的含义和用法的官方文档?
我目前正在学习x86汇编语言.
我有以下代码
.386
.MODEL FLAT, STDCALL
.STACK 4096
ExitProcess PROTO, dwExitCode: DWORD
.CODE
main PROC
MOV AX, 7FF0h
ADD AL, 10h
invoke ExitProcess, 0
main ENDP
END main
Run Code Online (Sandbox Code Playgroud)
之前,我感动10h到AL,AX包含值0x7FF0
移动后10h进入AL,我期待的AX是价值0x8000,而是在价值AX为0x7F00.
怎么会加入0x10到0xF0在最右边的字节(最低显著字节)并没有延续1到第二个最右边的字节?换句话说,怎么就加入0x10到0x7FF0没有造成0x8000?
我的猜测是,因为当我加入0x10,我加入0x10到AL(AL在另外的时间包含0xF0),因此加入0x10到0xF0导致0x100,但结转1 …
我有兴趣了解Git源代码,也许有一天会对它做出贡献.
我理解Git源代码是基于:
2)HTTP,HTTPS,SSH等技术
我只是想知道,还有什么是理解Git源代码的先决条件吗?