"java -server"和"java -client"之间有什么实际的区别吗?我在Sun的网站上找到的只是一个模糊的" - 服务器启动较慢但应该运行得更快".有什么真正的区别?(目前使用JDK 1.6.0_07.)
StringTokenizer?转换String为a char[]并迭代它?别的什么?
在Java中,以老式的方式迭代数组是否更快,
for (int i = 0; i < a.length; i++)
f(a[i]);
Run Code Online (Sandbox Code Playgroud)
或者使用更简洁的表格,
for (Foo foo : a)
f(foo);
Run Code Online (Sandbox Code Playgroud)
对于ArrayList,答案是否相同?
当然,对于大量的应用程序代码,答案是它没有明显的区别,因此应该使用更简洁的表单来提高可读性.然而,我正在研究的背景是重型技术计算,必须执行数十亿次操作,因此即使很小的速度差异也可能最终显着.
我需要将逗号分隔的字符串转换为整数列表.例如,如果我有以下字符串
String numbersArray = "1, 2, 3, 5, 7, 9,";
Run Code Online (Sandbox Code Playgroud)
有没有办法如何立即将其转换为List<Integer>?
现在我只看到一种方法.
List<String> numbers = Arrays.asList(numbersArray.split(","));
Run Code Online (Sandbox Code Playgroud)
然后
List<Integer> numbersInt = new ArrayList<>();
for (String number : numbers) {
numbersInt.add(Integer.valueOf(nubmer));
}
Run Code Online (Sandbox Code Playgroud)
我很好奇有没有办法如何错过分享,List<String>并在第一次开始转换它List<Integer>
我正在寻找一种方法来String从byte[]Java中反序列化尽可能少的垃圾.因为我正在创建自己的序列化器和反序列化器,所以我可以完全自由地在服务器端(即在序列化数据时)和客户端(即在反序列化数据时)实现任何解决方案.
我已经设法通过迭代chars()并将每个(16位值)转换为2x 8位值来有效地序列化 a String而不会产生任何垃圾开销.有这方面一个很好的辩论在这里.另一种方法是使用Reflection 直接访问底层,但这超出了问题的范围.String'sString.charAt(i)charString'schar[]
但是,我似乎不可能在byte[]没有创建char[] 两次的情况下反序列化,这似乎很奇怪.
程序,流程:
char[]byte[]并填写char[]String(char[])构造函数创建String由于Java的String不变性规则,构造函数复制char [],创建2x GC开销.我总是可以使用机制来规避这个(不安全的String分配+反射来设置char[]实例),但我只是想问一下,除了我违反每一个关于String's不变性的约定之外是否还有其他后果.
当然,对此最明智的回应是"来吧,停止这样做,并相信GC,原来char[]将是非常短暂的,G1将暂时摆脱它",这实际上是有道理的,如果char[]它更小比G1的区域大小的1/2.如果它更大,char []将直接分配为一个巨大的对象(即自动传播到G1的区域之外).这些物体很难在G1中有效地进行垃圾收集.这就是每个分配都很重要的原因.
关于如何解决这个问题的任何想法?
非常感谢.
我有一个最多有100000个字符的大字符串.我没有使用string.charAt[index]从字符串中读取字符,而是使用string.toCharArray()方法将该字符串转换为char数组,现在我正在使用charArray[index].这比string.charAt[index]方法花费的时间少.但是我想知道,有没有比string.toCharArray();方法更快的其他方法?
我正在考虑的是时间和效率.考虑到这些,哪种方法(在下面的方法或其他未提及的方法)是最有效的方法来遍历字符串的每个字符?
String str = "Foo Bar";
for(int i=0;i<str.length();i++)
System.out.println(str.charAt(i)); // access the character using .charAt()
for(char letter: str.toCharArray)
System.out.println(letter); // use for-each loop with the char array.
Run Code Online (Sandbox Code Playgroud)
同样,可能有更好的方法来做到这一点,但我也很好奇上面两者之间是否存在重大的时间/资源差异.
我想知道使用.charAt()是否比将字符串变量转换s为char [] a数组更快,a[i]而不是通过s.charAt(i)?
假设我们正在研究字符串中每个字符上有很多运算符的问题.
我所拥有的是一名有名字和简历的学生
所以我有一个班级学生喜欢:
private String name = "Unknown";
private char nameLetter = "u";
public void identify()
{
System.out.println("Student first letter : " + nameLetter);
System.out.println("Student name : " + name);
}
public void setName(String newName)
{
name = newName;
nameLetter = newName.substring(0);
}
Run Code Online (Sandbox Code Playgroud)
但我得到的错误不能从字符串转换为字符.
我知道我可以创建一个String nameLetter而不是char,但我想用char尝试它.