让我们为这个问题创建一个补充问题.在C++中获取文件大小的最常用方法是什么?在回答之前,确保它是可移植的(可以在Unix,Mac和Windows上执行),可靠,易于理解且没有库依赖(没有boost或qt,但是例如glib是可以的,因为它是可移植的库).
有人说我需要在运行配置中为我的应用程序执行此操作.当我打开那个窗口时,你能告诉我如何设置正确的参数和内存量吗?说如何设置2GB或1.5GB?
在Java中,我有一个表示带有int坐标的点的类
public class Point {
int x = -1;
int y = -1;
public Point (int xNew, int yNew) {
x = xNew; y = yNew;
}
public boolean equals (Object o) {
// no need for (o instanceof Point) by design
return x == ((Point)o).x && y == ((Point)o).y;
}
}
Run Code Online (Sandbox Code Playgroud)
我正在使用类的对象Point
作为a中的键HashMap
和作为元素HashSet
.
什么是该hashCode
功能的最佳候选人?我会把它加倍,这样左边的部分是x而右边的部分是y,例如:
x = 4, y = 12
,然后hashCode
返回4.12
.但是通过实现,它不能是double,只能是int.
这不是一个选择:
public int hashCode() {
// no …
Run Code Online (Sandbox Code Playgroud) 在Java中,用于占用int[]
大小数组的内存n
等于(4 + n) * 4
字节.
实际上可以通过以下代码证明:
public class test {
public static void main(String[] args) {
long size = memoryUsed();
int[] array = new int[2000];
size = memoryUsed() - size;
if (size == 0)
throw new AssertionError("You need to run this with -XX:-UseTLAB for accurate accounting");
System.out.printf("int[2000] used %,d bytes%n", size);
}
public static long memoryUsed() {
return Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory();
}
}
Run Code Online (Sandbox Code Playgroud)
4
括号中的数字很有意思.第一部分4
字节采用数组引用,第二部分 - 数组长度,然后剩下8个字节?
在Java中,让HashMap完全填充这种形式的数据:
HashMap<Integer, int[]> map = new HashMap<Integer, int[]>(1000000, 1);
Run Code Online (Sandbox Code Playgroud)
检查随机密钥是否存在时更快,比如说100:
if (map.get(100) == null))
Run Code Online (Sandbox Code Playgroud)
要么
if (!map.containsKey(100))
Run Code Online (Sandbox Code Playgroud)
?
从微观优化的角度来看问题很有意思.
我可以访问亚马逊云服务ec2,linux实例.我vi first.java
用这个内容创建了文件:
class first {
public static void main(String[] args) {
System.out.println("abc");
}
}
Run Code Online (Sandbox Code Playgroud)
我想使用以下方法编译文件:
[root@ip-21-24-273-243 ec2-user]# javac first.java
bash: javac: command not found
Run Code Online (Sandbox Code Playgroud)
没有找到指令?我做:
[root@ip-21-24-273-243 ec2-user]# java -version
java version "1.6.0_24"
OpenJDK Runtime Environment (IcedTea6 1.11.9) (amazon-57.1.11.9.52.amzn1-x86_64)
OpenJDK 64-Bit Server VM (build 20.0-b12, mixed mode)
Run Code Online (Sandbox Code Playgroud)
所以安装了java.我怎么能运行一个简单的应用程序?
[root@ip-21-24-273-243 ec2-user]# yum install java
Loaded plugins: priorities, security, update-motd, upgrade-helper
amzn-main | 2.1 kB 00:00
amzn-updates | 2.3 kB 00:00
Setting up Install Process
Package 1:java-1.6.0-openjdk-1.6.0.0-57.1.11.9.52.amzn1.x86_64 already installed and latest …
Run Code Online (Sandbox Code Playgroud) 除了这篇相当古老的帖子之外,我还需要一些能够使用原语并为包含大量HashSet
s的应用程序提供加速的东西Integers
:
Set<Integer> set = new HashSet<Integer>();
Run Code Online (Sandbox Code Playgroud)
所以人们提到像Guava,Javalution,Trove这样的图书馆,但是在基准和性能结果方面没有完美的比较,或者至少是来自良好体验的良好答案.从我看到很多人推荐Trove的TIntHashSet
,但其他人说它不是那么好; 有人说Guava是超级冷却和可管理的,但我不需要美观和可维护性,只需时间执行,所以Python的样式番石榴回家:) Javalution?我访问过该网站,对我来说似乎太老了,因此很古怪.
图书馆应提供最佳的可实现时间,内存无关紧要.
查看"Thinking in Java",可以创建HashMap
使用int[]
as键创建自定义.所以我希望看到类似的东西HashSet
或只是下载并使用一个惊人的库.
EDIT(响应下面的评论)所以在我的项目中,我从大约50个HashSet<Integer>
集合开始,然后我调用一个函数大约1000次,内部创建多达10个HashSet<Integer>
集合.如果我更改初始参数,则数字可能会以指数方式增长.我只用add()
,contains()
以及clear()
对这些集合的方法,这就是为什么他们选择.
现在我要找到一个实现HashSet
或类似的库,但是由于自动装箱Integer
开销会更快地完成,也许还有其他我不知道的东西.事实上,我正在使用整数,因为我的数据进入并存储在那些数据中HashSet
.
在Java中,使用以下函数为巨大的矩阵X打印其列不同的元素:
// create the list of distinct values
List<Integer> values = new ArrayList<Integer>();
// X is n * m int[][] matrix
for (int j = 0, x; j < m; j++) {
values.clear();
for (int i = 0; i < n; i++) {
x = X[i][j];
if (values.contains(x)) continue;
System.out.println(x);
values.add(x);
}
}
Run Code Online (Sandbox Code Playgroud)
首先,我按列(索引j)和内部按行(索引i)进行迭代.
对于不同的矩阵,此函数将被调用数百万次,因此应优化代码以满足性能要求.我想知道值数组.使用values = new ArrayList<Integer>();
或values = null
替代它会更快values.clear()
吗?
对不起真的很愚蠢的问题,我正在学习一门新语言并使用这段代码:
public class Exercise01 {
int i;
char c;
public static void main(String[] args) {
Exercise01 E = new Exercise01();
System.out.println("i = " + E.i);
System.out.println("c = [" + E.c + "]");
}
}
/* Output:
i = 0
c = [
*/
Run Code Online (Sandbox Code Playgroud)
为什么输出不会产生"]"字符?它与Unicode有关吗?
PostEdited:变量Ec未初始化用于实验目的.
让我们int[] A = new int[1000]
和int[] subA = new int [300]
这样subA \in A
(subA
的一个子集A
).如何A \ subA
在Java中以最快的方式查找数组?两个给定的数组A
和subA
排序.
编辑:抱歉,忘了提到数组包含不同的元素,只是它们包含其他结构的矩形,如矩阵行.
我在考虑这个解决方案:
// supp is short for supplement
int[] supp = new int[A.length - subA.length];
int j = A[0], c = 0;
for (int i = 0; i < subA.lengh; i++) {
// elegantly can be: while (j < subA[i]) supp[c++] = j++;
while (j < subA[i]) {
supp[c] …
Run Code Online (Sandbox Code Playgroud)